У меня такой код:
@ids = []
x = 'a'
@ids << x == 'a' ? [1,2] : [3,4]
@ids
Я ожидаю, что в следующей строке значение @ids должно быть @ids = [1,2]
, но я получаю @ids = ['a']
Зачем ?
3
Hernan Acosta
14 Апр 2020 в 23:13
1 ответ
Лучший ответ
Операции выполняются в порядке их приоритета. Операции в соответствующей строке кода выполняются в таком порядке:
- <<
- ==
- ?,:
См. Полный список на странице Приоритет операций 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])
Я надеюсь, вы найдете это полезным.
6
knugie
14 Апр 2020 в 20:48
Похожие вопросы
Новые вопросы
ruby-on-rails
Ruby on Rails - это полнофункциональная платформа веб-приложений с открытым исходным кодом, написанная на Ruby. Он следует популярной модели фреймворка MVC и известен своим подходом «соглашение поверх конфигурации» при разработке приложений.