Ваш второй пример инициализирует @blah
как переменную класса. Он не будет напрямую доступен (для него потребуется средство доступа к классу) и будет одинаковым для всех экземпляров класса.
Переменные экземпляра по своей природе являются закрытыми, хотя вы можете получить к ним доступ с помощью @foo.instance_variable_get("@blah")
. Традиционно, если вы хотите получить доступ к переменной экземпляра @blah
, вы должны добавить средство доступа.
class Shape
attr_accessor :blah
end
Это позволило бы вам сказать, например, shape = Shape.new; shape.blah = "whee"; puts shape.blah
(и вы получите "whee").