如何访问属性

时间:2015-12-23 09:50:43

标签: 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.enemies = [
  Enemy.new("toto"),
  Enemy.new("titi")
]

puts "#{map.enemies}"

我是Ruby的初学者

返回:

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

2 个答案:

答案 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的代码中。