Ответ 1
В опубликованном вами коде variable
есть не локальная переменная. Это метод метода для метода экземпляра с именем variable
, который был определен:
attr_accessor :variable
Это сокращение для следующих определений методов:
def variable
@variable
end
def variable=(value)
@variable = value
end
Обратите внимание, что Ruby не требует скобок ()
для вызова метода, поэтому различие между локальной переменной и методом не всегда легко.
Сравните ваш код с:
class Test
attr_accessor :foo
def example1
foo = nil # 'foo' is now a local variable
foo
end
def example2
foo # 'foo' is a method call
end
end
x = Test.new
x.foo = 10
x.example1 # => nil
x.example2 # => 10