Объекты в Ruby не имеют "свойств". У них есть переменные экземпляра (частные переменные, хранящие данные на экземпляр) и методы, которые могут обращаться к этим переменным.
Поскольку круглые скобки являются необязательными при вызовах методов Ruby и поскольку синтаксический сахар позволяет писать obj.foo = 42
в качестве более удобного способа вызова метода obj.foo=( 42 )
, вы можете думать , что это свойства. Они не; это методы, неотличимые от других.
Этот код:
class Foo
attr_accessor :bar
end
f = Foo.new
f.bar = 42
puts f.bar #=> 42
точно такой же, как этот (гораздо более длинный) код:
class Foo
def bar
@bar
end
def bar=( val )
@bar = val
end
end
f = Foo.new
f.bar=( 42 )
puts( f.bar() ) #=> 42
Методы attr_*
фактически создают методы для вас.