我正在研究鲁比·科恩,我要问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组合的含义的文档。
它是什么意思?它是如何使用的谢谢!

最佳答案

它只是一个普通的符号:

:@name
#=> :@name
:@name.class
#=> Symbol

根据Object#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

10-07 21:47