在我开始之前,我尝试过使用instance_eval和singleton方法无济于事。我将在这个问题上提出我的“最佳”尝试。红宝石:正确使用Lambdas
我努力做到以下几点:
value = rule(condition: lambda {@something > 100})
value.act(120)
以上调用不能改变。
什么可以改变的规则是如何定义的:
def rule(condition: nil)
t = Object.new
t.class.module_eval{
attr_accessor :condition
def act(something)
if(condition.call(something))
return "SUCCESS"
end
end
}
t.condition = condition
return t
end
我不确定如何获取拉姆达代码块得到的东西的价值。任何帮助或点在正确的方向将不胜感激!
这与您的确切问题无关,但我会建议制作一个Rule规则类而不是单一对象工厂方法,除非您有充分理由不这样做。 – Linuxios
您是否在说您不想更改示例lambda定义的方式?最简单的解决方案包括将lambda更改为接受参数(至今为止的答案)。 – Max
@Max - 确切地说 - 我不想改变示例lambda的定义 –