단락 평가를 피하는 방법
-
20-08-2019 - |
문제
저는 Ruby on Rails와 함께 일하고 있으며 두 가지 모델을 검증하고 싶습니다.
if (model1.valid? && model2.valid?)
...
end
그러나 "&&"연산자는 단락 평가를 사용합니다 (즉, "model1.valid?"만 참을 때만 "model2.valid?"를 평가합니다. 모델 1이 유효하지 않은 경우 model2.valids가 실행되는 것을 방지합니다.
단락 평가를 사용하지 않는 "&&"와 동등한 것이 있습니까? 두 가지 표현이 평가되어야합니다.
해결책
이 시도:
([model1, model2].map(&:valid?)).all?
둘 다 유효 한 경우 True가 반환되고 두 인스턴스 모두에 오류가 발생합니다.
다른 팁
& 잘 작동합니다.
irb(main):007:0> def a
irb(main):008:1> puts "a"
irb(main):009:1> false
irb(main):010:1> end
=> nil
irb(main):011:0> def b
irb(main):012:1> puts "b"
irb(main):013:1> true
irb(main):014:1> end
=> nil
irb(main):015:0> a && b
a
=> false
irb(main):016:0> a & b
a
b
=> false
irb(main):017:0> a and b
a
=> false
어때요 :
if [model1.valid?,model2.valid?].all?
...
end
나를 위해 일합니다.
별도로 평가하고 결과를 변수로 저장하십시오. 그런 다음 부울 사이에 간단한 &&를 사용하십시오 :)
지도로 추가 배열을 만드는 대신 블록을 전달할 수 있습니다. all?
.
[model_instance_1, model_instance_2].all? {|i| i.valid? }
제휴하지 않습니다 StackOverflow