Что делает оператор унарного вопроса (?)?
Я видел этот оператор в коде HAML. Интересно, для чего это.
Я вижу следующие работы:
> ?{
=> "{"
> ?\s
=> " "
> ?a
=> "a"
И это не работает:
> ?ab
SyntaxError: (irb):4: syntax error, unexpected '?'
Поэтому я предполагаю, что он принимает символ как аргумент и возвращает строку с этим символом.
вопросы:
- Что делает этот оператор?
- Когда следует использовать его?
- Если он действительно создает только строку с одним символом, почему он был включен в язык? Разве это не нарушает ортогональность языка? Какая польза?
Ответы
Ответ 1
Он возвращает одну символьную строку. Это самый короткий способ написать односимвольный строковый литерал. Используйте его, если вы хотите определить много односимвольных строк. Это наследие от Ruby < 1.9, где оно использовалось для возврата кода ASCII для этого символа. Я не понимаю, что вы подразумеваете под словом "ортогональность языка".
Ответ 2
Это не оператор, это символ буквальный. Однако в Ruby нет символьного типа, поэтому вместо экземпляра символьного типа литерал буква оценивает "представление по умолчанию для символа". В Ruby 1.9+, что a String
длины 1, в Ruby 1.8, это a Fixnum
, обозначающее кодировку Unicode символа.
Ответ 3
Re # 2, место, которое мне показалось полезным, заключается в том, чтобы передать, что параметр, который я устанавливаю, или значение, которое я тестирую, предназначен для одного символа, а не просто для того, чтобы это произошло просто строка. Это тонкая удобочитаемость/документация, но стоит подумать о последующих помощниках (включая меня).