#ruby
Вопрос:
???? : ??
Недавно я был на встрече с ruby, и это заявление было опубликовано как действительное заявление ruby. Может ли кто-нибудь объяснить его действительность и, если возможно, версии, в которых он действителен.
Комментарии:
1. Это неверно, но, возможно, это не совсем то, что было показано на той встрече.
Ответ №1:
Вполне вероятно, что вам не хватает одного вопросительного знака перед двоеточием: (пробел в нем не нужен, однако это лучше имитирует ваш исходный пост)
????? : ??
Вышесказанное справедливо, потому что интерпретатор распознает это утверждение как:
?? ? ?? : ??
При этом используется буквальное обозначение символа:
символьная литеральная нотация для представления строк с одним символом, синтаксисом которых является знак вопроса (?), за которым следует один символ или escape-последовательность, соответствующая одной кодовой точке в кодировке сценария
А также троичный, если [condition] ? true : false
Поскольку каждый объект , отличный от NilClass
или FalseClass
, считается «правдивым» в ruby, предлагаемое утверждение разбивается на :
????? : ??
"?" ? "?" : "?"
true ? "?" : "?"
"?"
Это предупредит о строковом литерале в условии, поскольку ветвь else недоступна
Что касается «…версий, в которых это действительно». Этот синтаксис, по-видимому, всегда был действителен (хотя я тестировал его только до версии 1.8.7 (2008)). Тем не менее, результат, который вы испытываете сегодня, произошел в 1.9.
В 1.8.7 та же инструкция вернет 63
десятичную кодовую точку ASCII для знака вопроса.
Ответ №2:
Этот вариант действителен: (и тот, который вы видели, вероятно, работает аналогично)
????::??
Это интерпретируется как:
?? ? ?: : ??
С ??
и ?:
являющимися (редко используемыми) строковыми литералами и ?
/ :
являющимися тернарным оператором.
Это то же самое, что:
if '?'
':'
else
'?'
end
Вне контекста это не делает ничего полезного.
Комментарии:
1. Это также очень справедливо. Аналогичное объяснение в качестве принятого ответа
Ответ №3:
Недавно я был на встрече с ruby, и это заявление было опубликовано как действительное заявление ruby.
Тот факт, что он был опубликован как действительный, не делает его таковым.
Может ли кто-нибудь объяснить его действительность
Это не так.
и, если возможно, версии, в которых он действителен.
Нет.