==和案例之间的区别?

Fuz*_*Fuz 6 ruby parsing file

我是Ruby的新手,我正在努力解决一些困扰我的问题.在编写一个简单的解析器时,我发现将char与a进行比较==会产生与将其与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
Run Code Online (Sandbox Code Playgroud)

假设Quote.txt是一个包含单引号字符(0x22)的1字节文件,这会产生:

Quote
ErrCase
true
true
"\""
Run Code Online (Sandbox Code Playgroud)

我假设我做错了什么,但我无法弄清楚它是什么.有人可以帮忙吗?

顺便说一句,这是在Ruby 1.9.2中.

Jör*_*tag 2

它看起来像是 Windows 上 YARV 中的一个错误。我在 JRuby 1.6.0 中得到了正确的输出:

# ruby -v
ruby 1.9.2p180 (2011-02-18) [i386-mingw32]

# ruby test.rb
Quote
ErrCase
true
true
"\""

# jruby --1.9 -v
jruby 1.6.0 (ruby 1.9.2 patchlevel 136) (2011-03-15 f3b6154) (Java HotSpot(TM) Client VM 1.7.0-ea) [Windows XP-x86-java]

# jruby --1.9 test.rb
Quote
QuoteCase
true
true
"\""
Run Code Online (Sandbox Code Playgroud)