我刚开始学习Ruby,尝试着写一个简单的解析器时,发现用==
比较字符和用case
表达式比较字符会产生不同的结果,这让我感到困惑。
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
假设
Quote.txt
是一个1字节大小的文件,其中只包含一个引号字符(0x22
),那么这将产生以下结果:Quote
ErrCase
true
true
"\""
我猜我做错了什么,但是我想不出来是什么。有人能帮忙吗?
顺便说一下,这是在Ruby 1.9.2中。
c === "\""
能行吗? - R. Martinho Fernandes