【发布时间】:2014-04-10 06:07:11
【问题描述】:
我一直在编写 DSL,并且正在尝试获取一个动态定义的方法,以便从 lambda 访问。除非您尝试执行 setter something=,否则这很好用,在这种情况下,lambda 调用只是设置了一个局部变量。
一个简化的例子:
class Caller
attr_accessor :cmd
def callme
self.class.send(:define_method, "something") { puts "Retrieve Something" }
self.class.send(:define_method, "something=") {|val| puts "Set Something = #{val}" }
instance_exec &cmd
end
end
c = Caller.new
c.cmd = lambda { something = 1 }
c.callme
如果我使用self.something=,这也可以正常工作。然而,在 DSL 的情况下,这并不理想。
如果方法前面没有self.,是否可以让它工作?
【问题讨论】:
标签: ruby lambda metaprogramming dsl