Ruby 如何访问属性

Ruby 如何访问属性,ruby,Ruby,我想说出敌人的名字(托托和提提)。我该怎么做 我的简化代码: 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

我想说出敌人的名字(托托和提提)。我该怎么做

我的简化代码:

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}"
职业玩家
属性访问器:名称。。。
def初始化(名称)
@name=name
...
结束
...
结束
职业敌人<玩家
...
结束
类图
属性访问器:敌人
...
结束
##############
map=map.new
map.defects=[
新敌人(“toto”),
新敌人(“提提”)
]
放置“#{map.friends}”
我是Ruby的初学者

返回:

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

如果我正确理解了您的问题,那么:

map.enemies.each do |enemy|
  puts enemy.name
end
返回一个名称数组

puts map.enemies.map(&:name)

您可以在
敌方
中定义方法
。此方法在
放置对象时使用:

class Enemy
  ...
  def to_s
    @name
  end
end

enemy = Enemy.new("foo")

puts enemy
#=> foo
要打印对象的
数组
的名称,您可以使用
数组
上的
连接

map = Map.new

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

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

这样做的好处是,
敌方
对象现在负责知道它应该如何打印,而不是在使用
敌方

的代码中传播这种行为。请在用英语书写时使用英语标点。您也可以直接
放置
数组。这里:
放置map.friends.map(&:name)
正确的方法是使用特殊的打印机对象。但是对于这个程序来说,OOP可能太高了:)我很想说Java方式,但是是的-P