在我開始之前,我嘗試過使用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的定義 –