Было бы полезно, если бы вы сказали, что должен делать ваш код, но, думаю, я наконец-то понял.|
, который у вас есть, вовсе не является ИЛИ, ни побитовым, ни логическим.Это операция объединения массивов.Ищите это под Array rubydoc.Он принимает аргументы Array и выдает результат Array, состоящий из всех элементов любого массива.
Поскольку почти все в Ruby является объектом (кроме блоков, здесь не релевантных), абсолютных операторов нет«кроме простого назначения.Каждый оператор на самом деле является методом, определенным в некотором классе и, следовательно, контекстным.
Кроме того, как кто-то правильно указал (удален сейчас), побитовое ИЛИ имеет дело с целыми числами, а не с логическими значениями: 7 | 12 == 15
.Логический или ||
имеет дело с булевыми значениями, но он также может возвращать не булевы значения, поскольку строго говоря все, кроме nil
и false
, является истинным.Таким образом, 7 || 12
возвращает 7
, а не true
(что по-прежнему эквивалентно истине в большинстве контекстов).
ОБНОВЛЕНИЕ: Я упустил из виду тот факт, что ||
и &&
, когда он используется в булевом объекте, фактически не может быть определен в Ruby из-за их семантики короткого замыкания.Тем не менее это не меняет того факта, что они ведут себя как булевы методы.