我想把敌人的名字(托托和蒂蒂)。我怎样才能做到这一点 ?
我的简化代码:
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 :(得分:2)
如果我理解你的问题,那么:
map.enemies.each do |enemy|
puts enemy.name
end
返回一个名字数组
puts map.enemies.map(&:name)
答案 1 :(得分:1)
您可以在to_s
中定义方法Enemy
。当您puts
一个对象时使用此方法:
class Enemy
...
def to_s
@name
end
end
enemy = Enemy.new("foo")
puts enemy
#=> foo
要打印Array
个对象的名称,您可以在join
上使用Array
:
map = Map.new
map.enemies = [Enemy.new("foo"), Enemy.new("bar")]
puts map.enemies.join(", ")
#=> foo, bar
这样做的好处是Enemy
对象现在负责知道应该如何打印它,而不是这种行为分散在使用Enemy
的代码中。