我有一些严重的麻烦来理解带有参数的块。 我想使用这种Ruby代码:
FooBar.foo do |foo_arg|
bar do |bar_arg|
define_method :hello!, foo_arg, bar_arg do
"Hello, #{foo_arg} and #{bar_arg}!"
end
end
end
include FooBar
hello!(:Alice, :Bob) # => "Hello, Alice and Bob!"
为此,我添加了几行:
module FooBar
def self.foo &foo_block
instance_eval &foo_block
end
def self.bar &bar_block
instance_eval &bar_block
end
end
但是因为管道之间的参数是特殊的,所以我遇到了语法错误。谢谢你的帮助!
答案 0 :(得分:3)
您的模块似乎正常工作。问题是您使用define_method
。参数foo_arg
和bar_arg
必须是传递给define_method
的块的一部分。
module FooBar
def self.foo(&foo_block)
instance_eval &foo_block
end
def self.bar(&bar_block)
instance_eval &bar_block
end
foo do |foo_arg|
bar do |bar_arg|
define_method :hello! do |foo_arg, bar_arg|
"Hello, #{foo_arg} and #{bar_arg}!"
end
end
end
end
include FooBar
hello!(:Alice, :Bob) # => "Hello, Alice and Bob!"
应该做你想做的事。