以下是代码:
class Dungeon
attr_accessor :player
def initialize(player_name)
@player = Player.new(player_name)
end
end
现在,如果我写:
dungeon = Dungeon.new("Robert")
puts dungeon.player.name
显然会吐出Robert
。
我对Ruby有点新鲜,所以如果这个问题对你们所有人都很明显,请原谅我。我仍然在努力绕过它。我正在学习“实例”,“类”和全局变量,我的问题是:Ruby如何知道上面代码中的:player
是指@player
?为什么不编写代码:@player
?
这有意义吗?
答案 0 :(得分:1)
attr_accessor
只是一种定义公共getter / setter的方法。 @player
是存储值的实际实例变量。它生成的getter基于符号名称,因此:player
创建了这些方法:
def player
@player
end
def player=(player)
@player = player
end
如果您只想要吸气剂,可以使用attr_reader
。如果您只想要设置器,则可以使用attr_writer
。 attr_accessor
结合了这两种方法,并为您提供了两种方法。
答案 1 :(得分:1)
首次学习Ruby时容易忽略的一点是构造
attr_accessor :property_name
只是为类的实例变量编写getter和setter方法的一种较短方法:
# getter
def property_name
@property_name
end
# setter
def property_name=( some_value )
@property_name = some_value
end
它基本上是Ruby中“元编程”支持的一个例子,但它感觉更像是一些神秘的东西。
此外,您不必使用符号样式,而是可以使用:
attr_accessor "property_name"
符号版本对大多数人来说“读得更好”。