У меня есть массив лямбда, я бы хотел запустить все ламбы в одно и то же время, у массива может быть любое количество lamba's, что затрудняет его. Так как вы можете только перечислить массив.Ruby retry Array # каждая петля
def detect_int(*args)
return 1 if args.empty?
n = 1
args.each do |lam|
until lam.call(n) do
n += 1
end
retry if lam.call(n) == false
end
n
end
Этот метод должен работать теоретически, он должен увеличить счет до того, как lam1.call (n) вернет true. то он перейдет к следующему ламу, если lam2.call (n) возвращает false, он должен повторить цикл args.each с добавленным шагом n, начиная с lam1 снова. и так далее.
только я получаю SyntaxError: (irb):76: Invalid retry
как бы вы повторить, что каждый цикл так, что он начнет с самого начала
Я читал на ruby loops and the retry method here. кажется мое, чтобы соответствовать синтаксису правильно, но потому, что его цикл в цикл может стать запутанным. в настоящее время его сидит в петле args, которая является циклом, который я хотел бы сбросить.
Я смущен тем, что вы пытаетесь сделать здесь. Если у вас нет лямбды, которая возвращает разные значения для одного и того же входа каждый раз, когда вы его вызываете, 'lam.call (n) == false' всегда возвращает false, так как вы только что закончили проверку (в состоянии' до') что 'lam.call (n)' был правдивым непосредственно перед этим? – Ajedi32
Да, извините, что это была большая часть проблемы, которая никогда не попадет, потому что до тех пор, пока блок не будет перебираться до тех пор, пока не найдет решение, таким образом сделав попытку бесполезной. Мне понадобилась бы итерация args, чтобы начать снова, что было очень болезненным процессом. Выполнение этого пути слишком мета. – TheLegend