Кроме того, более приятное ||=
выдает предупреждение (по крайней мере, на 1.8.6 и 1.8.7) о неинициализированных переменных экземпляра, в то время как более подробная версия defined?
не делает.
С другой стороны, это, вероятно, делает то, что вы хотите:
def initialize
@foo = nil
end
def foo
@foo ||= some_long_calculation_for_a_foo
end
Но это почти наверняка не так:
def initialize
@foo = nil
end
def foo
return @foo if defined?(@foo)
@foo = some_long_calculation_for_a_foo
end
, поскольку @foo
будет всегда определяться в этой точке.