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