¿Qué hace el operador unario de interrogación (?)?

Vi este operador en el código HAML. Me pregunto para qué sirve.

Veo los siguientes trabajos:

> ?{ => "{" > ?\s => " " > ?a => "a" 

Y esto no funciona:

 > ?ab SyntaxError: (irb):4: syntax error, unexpected '?' 

Entonces, supongo que le toma a un personaje un argumento y le devuelve una cadena con ese personaje.

preguntas:

  1. ¿Qué hace este operador?
  2. ¿Cuándo debería uno usarlo?
  3. Si realmente solo crea una cadena de un carácter, ¿por qué se incluyó en el idioma? ¿No rompe la ortogonalidad del lenguaje? ¿Cuál es el beneficio?

Devuelve una sola cadena de caracteres. Es la forma más corta de escribir un literal de cadena de un solo carácter. Úselo cuando quiera definir muchas cadenas de caracteres individuales. Es un patrimonio de Ruby <1.9, donde solía devolver el código ASCII para ese personaje. No entiendo lo que quiere decir con "romper la ortogonalidad del lenguaje".

No es un operador, es un personaje literal. Sin embargo, no hay ningún tipo de carácter en Ruby, así que en lugar de una instancia de un tipo de carácter, el carácter literal se evalúa como la “representación predeterminada de un personaje”. En Ruby 1.9+, eso es un String de longitud 1, en Ruby 1.8, es un Fixnum indica el punto de código Unicode del personaje.

Re # 2, un lugar que encontré útil es transmitir que un parámetro que estoy configurando o valor que estoy probando tiene la intención de ser un solo carácter y no solo que esto sea simplemente una cadena corta. Es una cosa sutil de legibilidad / documentación, pero vale la pena considerarlo para los mantenedores posteriores (incluyéndome a mí).