【发布时间】:2018-01-12 23:39:37
【问题描述】:
请考虑以下代码:
def a &block_a
define_method :b do |&block_b|
puts "Running in define_method"
instance_exec block_a, &block_b
end
end
a do
puts "In block A"
end
b do |&block|
puts "In block B"
instance_eval &block
end
我希望将给方法“b”的块作为参数给定给方法“a”的块(b 是动态创建的)。 但是会返回以下输出/错误:
Running in define_method
In block B
wrong number of arguments (given 0, expected 1..3)
(repl):14:in `instance_eval'
(repl):14:in `block in <main>'
(repl):4:in `instance_exec'
(repl):4:in `block in a'
(repl):12:in `<main>'
“&block”似乎为零(尝试调用“block.call”而不是“instance_eval &block”会引发“block is nil”错误)。逻辑似乎很好,因为用字符串替换 'b' 块参数确实有效:
def a s
define_method :b do |&block_b|
puts "Running in define_method"
instance_exec s, &block_b
end
end
a "LOL"
b do |s|
puts "In block B"
puts s
end
感谢您的帮助!
【问题讨论】:
标签: ruby