【发布时间】:2015-06-13 20:08:31
【问题描述】:
如果你运行下面的代码,你会得到一个错误。
class C
def self.filter_clause param_1
puts param_1
yield # context of this param is class B
end
def hi
"hello"
end
end
class B
def self.filter(value, lambda)
code = lambda { filter_clause(value, &lambda) }
C.instance_exec(&code)
end
filter(:name, ->{ hi })
end
错误是
NameError: undefined local variable or method `hi' for B:Class
from (pry):17:in `block in <class:B>'
据我了解,原因是 lambda 在 class B 的上下文中运行。所以找不到方法def hi。我不知道如何让它在class C 的上下文中运行。
本质上,我希望能够注入在另一个接受参数和块的类中调用的方法。
例如:
filter_clause("value", ->{ hi })
这可能吗?
不确定我是否有道理。
【问题讨论】:
-
这个A类在哪里?
-
抱歉删除了对 A 的引用。
标签: ruby lambda metaprogramming