Поскольку локальная область имеет приоритет, когда вы говорите foo = something
, будет создана локальная переменная foo
, которой будет присвоено содержимое something
.
Причина, по которой вы можете написать foo
для использования метода получения, заключается в том, что Ruby будет перемещаться вверх по области видимости, когда не сможет найти переменную с этим именем, и в конечном итоге найдет метод.
Если существует локальная переменная с тем же именем, что и у метода get, Ruby будет использовать ее значение вместо:
class Foo
attr_accessor :foo
def initialize
@foo = :one
end
def f
foo = :two
foo
end
end
Foo.new.f
# => :two
Чтобы прояснить, что вы хотите получить доступ к установщику, вы должны написать self.foo = something
. Это скажет Ruby, что вы хотите выполнить метод foo=
для объекта self
с something
в качестве параметра.