1
Я следующий кодРубин передать аргументы, чтобы блокировать
class SomeClass
#define method, which take block and save it into class variable
def self.test(&block)
@@block = block
end
#pass block to method
test do |z|
p self
p z
end
#call block with argument and change context
def call_block(arg)
block = @@block
instance_eval &block.call(arg)
end
end
s = SomeClass.new
s.call_block("test")
Я получил выход
SomeClass # Why not instance?
"test"
4.rb:14:in `call_block': wrong argument type String (expected Proc) (TypeError)
from test.rb:20:in `<main>'
Почему результат? Как изменить область действия с экземпляра SomeClass на SomeClass?
UPD:
Ошибка, потому что блок возврата строки, но должен быть обратный блок или лямбда или процедурный.
возможно дубликат [Обеспечить ценность для себя при использовании ProC# вызов] (http://stackoverflow.com/questions/1728900/provide-value-for-self-when-using-proccall) – sawa
это не дубликат – mike