29 ruby-on-rails operators short-circuiting logical-operators
我正在使用Ruby on Rails,并希望验证两种不同的模型:
if (model1.valid? && model2.valid?)
...
end
Run Code Online (Sandbox Code Playgroud)
但是,"&&"运算符使用短路评估(即仅当"model1.valid?"为真时才评估"model2.valid?"),这会阻止在model1无效时执行model2.valids.
是否存在不会使用短路评估的等效"&&"?我需要评估两个表达式.
Cod*_*eef 26
试试这个:
([model1, model2].map(&:valid?)).all?
Run Code Online (Sandbox Code Playgroud)
如果两者都有效,它将返回true,并在两个实例上创建错误.
Pau*_*ith 24
工作得很好.
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7517 次 |
| 最近记录: |