Что означает переменная экземпляра Ruby с предшествующим двоеточием (@name)?

Я работаю с 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.

Что это значит и как это используется? Спасибо!


person Mark    schedule 19.01.2015    source источник


Ответы (1)


Это обычный символ:

:@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]

Итак, здесь Руби Коанс говорит, что fido.instance_variables должно быть равно массиву, содержащему символ :@name.

assert_equal [:@name], fido.instance_variables
person Ajedi32    schedule 19.01.2015