如何使用三元运算符将值推入数组?

Rav*_*avi 4 ruby

数组返回的是布尔值,而不是三元运算符分配的值

和代码...

arr = []
arr <<  true == false ? 'a' : 'b'
# Expecting, the output of arr to be ['b']. But instead, I was getting [true] 
Run Code Online (Sandbox Code Playgroud)

为什么会这样呢?

为了获得正确的价值,我必须这样做。

arr << if true == false
         'a'
       else
         'b'
       end  

# and also, = also works fine
arr =  true == false ? 'a' : 'b' # arr has 'b'

Run Code Online (Sandbox Code Playgroud)

为什么使用三元运算符时行为会有所不同?

the*_*tor 16

这是由于Ruby的operator优先级。运算符的<<优先级高于三元运算符。您的示例可以通过修改以下代码来解决:

arr = []
arr << (true == false ? 'a' : 'b')
Run Code Online (Sandbox Code Playgroud)

  • 或者`arr.push(true == false?'a':'b')` (4认同)
  • 也许这是一个hack,但这也可以:`arr &lt;&lt; = true == false?'a':'b'` (2认同)

Rav*_*avi 1

谢谢大家的帮助,我喜欢 iGian ie 的解决方案,不带括号。

arr <<= true == false ? 'a' : 'b'

Run Code Online (Sandbox Code Playgroud)