2010-02-06 12 views

Respuesta

21

Ruby 1.8 tiene una sintaxis de prefijo que convierte un carácter en su valor de código ASCII. Por ejemplo, ?a es el valor ASCII para la letra a (o 97). El doble signo de interrogación que ve es realmente el número 63 (o el valor ASCII para ?).

?a # => 97 
?b # => 98 
?c # => 99 
?\n # => 10 
?? # => 63 

Para convertir de nuevo, puede utilizar la chr método:

97.chr # => "a" 
10.chr # => "\n" 
63.chr # => "?" 

??.chr # => "?" 

En Ruby 1.9, la sintaxis ?a devuelve el carácter en sí (al igual que la sintaxis de corchetes en las cadenas):

??   # => "?" 

"What?"[-1] # => "?" 
+0

¿Sería correcto decir que la sintaxis '?' Está obsoleta en 1.9, dado que ahora tiene poco sentido? –

+0

Myrddin, eso es probablemente algo justo que decir. No veo mucho sentido en el uso de la sintaxis '?' En 1.9. –

2

Como dice Ryan, el prefijo ? le da el valor ASCII de un personaje. La razón por la cual esto es útil en este contexto es que cuando usa la notación del índice en una cadena en Ruby 1.8, se devuelve el valor ASCII en lugar del carácter. p.ej.

irb(main):009:0> str = 'hello' 
=> "hello" 
irb(main):010:0> str[-1] 
=> 111 

por lo que el siguiente no se pondría a prueba si el último carácter de una cadena era la letra 'O'

irb(main):011:0> str[-1] == 'o' 
=> false 

pero esto sería:

irb(main):012:0> str[-1] == ?o 
=> true 

y (siempre y cuando sepas ¿qué es lo que hace?) esto es un poco más claro que

irb(main):013:0> str[-1] == 111 
=> true 
+1

Lo anterior se aplica para Ruby 1.8, no 1.9 donde '" hola "[- 1] ==" o "' –

+2

Esta es exactamente la razón por la cual, en ruby19, ese '? O ==" o "', de modo que ' "hola" [- 1] ==? o' en ruby18 y ruby19. – rampion

+0

Gracias Glenn, he actualizado la respuesta para aclarar el bit que solo se aplica en 1.8 – mikej