me encontré con este pedazo de código Ruby:rubí doble interrogación
str[-1]==??
¿Cuál es el doble interrogación todo esto? Nunca he visto eso antes.
me encontré con este pedazo de código Ruby:rubí doble interrogación
str[-1]==??
¿Cuál es el doble interrogación todo esto? Nunca he visto eso antes.
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] # => "?"
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
Lo anterior se aplica para Ruby 1.8, no 1.9 donde '" hola "[- 1] ==" o "' –
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
Gracias Glenn, he actualizado la respuesta para aclarar el bit que solo se aplica en 1.8 – mikej
¿Sería correcto decir que la sintaxis '?' Está obsoleta en 1.9, dado que ahora tiene poco sentido? –
Myrddin, eso es probablemente algo justo que decir. No veo mucho sentido en el uso de la sintaxis '?' En 1.9. –