Как уже говорили другие, он используется как синтаксис без захвата для регулярного выражения, но также является допустимым синтаксисом ruby вне регулярного выражения.
В рубине ?:
- целочисленное значение для символа двоеточия:
% irb
irb> ?:
=> 58
irb ":"[0]
=> 58
Добавление круглых скобок не меняет значение: (?:) == ?:
Когда вы добавляете пробелы (? :
), это троичный оператор, который по сути является сокращением для if / then / else в ruby, поэтому выражение ( bool ? truish : falsy )
эквивалентно
if bool then
truish
else
falsy
end