我正在研究Ruby Koans,并提出了问题#193:
class Dog2
def set_name(a_name)
@name = a_name
end
end
def test_instance_variables_can_be_set_by_assigning_to_them
fido = Dog2.new
assert_equal [], fido.instance_variables
fido.set_name("Fido")
assert_equal [___], fido.instance_variables
end
答案是“assert_equal :@ name ,fido.instance_variables”。我知道冒号(:)表示符号,atsign(@)表示实例变量。但是,我还没有找到关于结合冒号和atsign意味着什么的文档。
它是什么意思,它是如何使用的?谢谢!
答案 0 :(得分:6)
它只是一个常规符号:
:@name
#=> :@name
:@name.class
#=> Symbol
根据Object#instance_variables
的文档:
instance_variables→数组
返回接收者的实例变量名称数组。注意 简单地定义一个访问器不会创建相应的 实例变量。
class Fred attr_accessor :a1 def initialize @iv = 3 end end Fred.new.instance_variables #=> [:@iv]
所以Ruby Koans在这里说fido.instance_variables
应该等于包含符号:@name
的数组。
assert_equal [:@name], fido.instance_variables