gpt4 book ai didi

ruby - 如何从 lambda 创建和返回 Ruby 类?

转载 作者:太空宇宙 更新时间:2023-11-03 17:24:32 24 4
gpt4 key购买 nike

我正在尝试创建一个将返回 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com