Прежде чем я начну, я попытался использовать методы instance_eval и singleton безрезультатно. Я собираюсь представить свою «лучшую» попытку решить эту проблему.Ruby: Правильно использовать 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» вместо метода фабрики Singleton, если у вас нет веской причины. – Linuxios
Вы говорите, что не хотите изменять способ определения лямбда? Самое простое решение включает в себя изменение лямбда, чтобы принять аргумент (как до сих пор дают ответы). – Max
@Max - точно - я не хочу изменять способ определения лямбда –