Почему '||'оператор возврата '[]'? - PullRequest
0 голосов
/ 10 октября 2018

Я тестировал это на консоли:

[] || 1 # => []

Разве не должно возвращаться значение, которое выходит, а не []?Я могу изменить его на троичный оператор, который отлично работает, но почему вышеприведенное условие не работает?

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Точная семантика ||:

  1. , если первое выражение не nil или false, вернуть
  2. , если первое выражение nil илиfalse, верните второе выражение

Так что, поскольку [] является правдивым, оно оценивается как [], как объясняет @ Ursus.

0 голосов
/ 10 октября 2018

Поскольку [] является истинным значением в Ruby, поэтому вторая часть вашего выражения никогда не выполняется, она всегда оценивается как [].В Ruby просто false и nil не соответствуют действительности.

О, в любом случае, вам это не нужно.map возвращает пустой массив, если массив пуст.

Model.new(
  name: abc.name,
  description: abc.description,
  product_ids: abc.product_ids.map(&:id) 
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...