我正在尝试创建一个将返回 stub 类的 lambda。这是我得到的:
engine_stub = lambda { |valid|
Class.new {
def valid?(address)
valid
end
}
}
lambda 应该返回一个类,其valid?
实例方法始终返回传递给 lambda 的值。此代码因错误而失败:
NameError: undefined local variable or method `valid' for #<#<Class:0x007f4bf0ebd
0f0>:0x007f4bf0ebcd08>
很明显,该方法无法访问 lambda 范围。我也试过这个:
engine_stub = lambda { |valid|
stub_class = Class.new
def stub_class.valid?(address)
valid
end
return stub_class
}
反而会导致这个错误:
NoMethodError: undefined method `valid?' for #<#<Class:0x007fecbada1138>:0x007fec
bada0df0>
所以现在我没能使 valid?
成为一个实例变量。
总结
我正在尝试让 lambda engine_stub
返回一个类,其中包含一个实例方法 valid?
,该方法返回传递给 lambda 的值。我该怎么做?
最佳答案
关键字 def
是作用域门,因此您应该通过 define_method{}
定义方法
engine_stub = -> valid do
Class.new { define_method :valid? do valid end }
end
关于ruby - 如何从 lambda 创建和返回 Ruby 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16980316/