2015-12-23 150 views
2

我想把敵人的名字(toto和titi)。我怎樣才能做到這一點 ?如何訪問屬性

我的簡化代碼:

class Gamer 
    attr_accessor :name, ... 
    def initialize(name) 
    @name = name 
    ... 
    end 
    ... 
end 

class Enemy < Gamer 
    ... 
end 

class Map 
    attr_accessor :enemies 
    ... 
end  
############## 
map = Map.new 
map.enemies = [ 
    Enemy.new("toto"), 
    Enemy.new("titi") 
] 

puts "#{map.enemies}" 

我在Ruby的初學者

回報:

[#<Gamer:0x000002e29da0 @name="toto">, #<Gamer:0x000002e29d50 @name="titi">] 
+0

用英文書寫時請用英文標點符號。 – sawa

回答

2

如果我明白你的問題正確,則:

map.enemies.each do |enemy| 
    puts enemy.name 
end 

返回一個數組名

puts map.enemies.map(&:name) 
+0

你也可以直接'puts'數組。這裏:'puts map.enemies.map(&:name)' – shivam

1

可以在Enemy定義方法to_s。使用此方法時,你puts對象:

class Enemy 
    ... 
    def to_s 
    @name 
    end 
end 

enemy = Enemy.new("foo") 

puts enemy 
#=> foo 

要打印對象的Array的名字,那麼你可以在Array使用join

map = Map.new 

map.enemies = [Enemy.new("foo"), Enemy.new("bar")] 

puts map.enemies.join(", ") 
#=> foo, bar 

這樣做的好處是,Enemy對象現在負責知道應該如何打印,而不是將這種行爲分散到使用Enemy的代碼中。

+0

_proper_方法是使用特殊的打印機對象。但這可能是太高的OOP這個程序:) –

+0

我很想說* Java *的方式,但是。 :-P – Drenmi