"str" << false
- минимальный пример ошибки, с которой вы столкнулись. Ошибка является результатом недопонимания, связанного с приоритетом оператора. Примечательно, что ?:
имеет более низкий приоритет, чем <<
;поэтому
a << b ? c : d << e
(где b
- ваш !search.nil?
) оценивается как
(a << b) ? c : (d << e)
, в то время как вы надеялись, что оно будет оцениваться как
a << (b ? c : d) << e
Решение:добавьте скобки, чтобы обеспечить желаемый порядок оценки.