Soy nuevo en Ruby y estoy tratando de resolver algo que me confunde. Al escribir un analizador simple, me encontré con que comparar un char con un ==
produciría un resultado diferente que comparándola con una expresión case
:¿Diferencia entre == y caso?
File.open('Quote.txt') do |f|
f.chars.each do |c|
puts c == '"' ? 'Quote' : 'Err'
puts case c
when '"' then 'QuoteCase'
else 'ErrCase'
end
p c == '"', c === '"', c
end
end
Suponiendo Quote.txt
es un archivo de 1 byte que contiene un carácter de comilla simple (0x22
), esto produce:
Quote
ErrCase
true
true
"\""
Asumo que he hecho algo mal, pero no puedo averiguar lo que es. ¿Alguien puede ayudar?
Esto está en Ruby 1.9.2, por cierto.
¿Cuál es el tipo de c? ¿Y cuál es el tipo de "\" "? ¿Funciona' c === "\" "'? –
Cadena, Cadena y sí, en ese orden. – Fuz
Me tomé la libertad de hacer que el código fuera un poco más Rubyish (todas esas barras invertidas me hicieron sangrar los ojos :-)) y agregué algunas depuraciones. –