Что делает оператор унарного вопроса (?)?

Я видел этот оператор в коде 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, место, которое мне показалось полезным, заключается в том, чтобы передать, что параметр, который я устанавливаю, или значение, которое я тестирую, предназначен для одного символа, а не просто для того, чтобы это произошло просто строка. Это тонкая удобочитаемость/документация, но стоит подумать о последующих помощниках (включая меня).