Меня смущает определение связывания блоков в ruby.Вот два примера:
def redfine_a(&block)
a = 2
puts eval("a", block.binding)
block.call
end
a = "hello"
puts redfine_a {a}
Этот может работать с ожидаемым результатом, а второй:
def redefine_a(&block)
a= 2
puts eval("a", block.binding)
block.call
end
puts redefine_a{a= "hello"}
будет жаловаться:
undefined local variable or method `a' for main:Object (NameError)
ПослеЯ удалил puts eval("a", block.binding)
, мой код запускается:
def redefine_a(&block)
a= 2
block.call
end
puts redefine_a{a= "hello"}
Где я не прав?