как поместить значение в массив с троичным оператором? - PullRequest
4 голосов
/ 24 июня 2019

массив возвращает логическое значение вместо значения, назначенного троичным оператором

и кода ...

arr = []
arr <<  true == false ? 'a' : 'b'
# Expecting, the output of arr to be ['b']. But instead, I was getting [true] 

Почему это поведение?

и чтобы получить правильное значение, я должен сделать это.

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

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

и почему поведение отличается при использовании троичного оператора?

Ответы [ 2 ]

16 голосов
/ 24 июня 2019

Это связано с приоритетом оператора Ruby . Оператор << имеет больший приоритет, чем троичный оператор. Ваш пример может быть решен путем изменения кода, как показано ниже:

arr = []
arr << (true == false ? 'a' : 'b')
1 голос
/ 24 июня 2019

спасибо всем за помощь, мне нравится решение iGian, т.е. без скобок.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...