Ruby оператор showel против (? :) условный - PullRequest
3 голосов
/ 14 апреля 2020

У меня есть следующий код:

@ids = []
x = 'a'
@ids << x == 'a' ? [1,2] : [3,4]
@ids

Я ожидаю, что в следующей строке значение @ids должно быть @ids = [1,2], но я получаю @ids = ['a']

Почему?

1 Ответ

6 голосов
/ 14 апреля 2020

Операции выполняются в порядке их приоритета. Операции в соответствующей строке кода выполняются в следующем порядке:

  1. << </li>
  2. ==
  3. ?,:

См. Полный список по приоритету операции Ruby.

Здесь в скобках указано, что на самом деле происходит в вашем примере:

(((@ids << x) == 'a') ? [1,2] : [3,4])
^^^----1----^       ^                ^
||---------2--------|                |
|------------------3-----------------|

Чтобы получить результат Вы ожидаете, напишите

@ids << (x == 'a' ? [1,2] : [3,4])

или

@ids.push(x == 'a' ? [1,2] : [3,4])

Надеюсь, вы найдете это полезным.

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