为什么我不能从哈希中读取值?

时间:2014-04-22 20:10:51

标签: ruby hash

考虑以下代码:

  hash = {"a"=>["B", "C"], "b"=>["C"], "c"=>["D", "E"], "d"=>["F"]}
  puts hash["a"]

这只是打印什么。

puts hash["a"].class

这会打印NilClass

以下ruby版本中是否存在某种已知错误?

  

ruby​​ 2.0.0p247(2013-06-27修订版41674)[universal.x86_64-darwin13]

我希望有人可以帮助我,这让我发疯。我的IDE是JetBrains的RubyMine。我也尝试通过IRB直接运行它。

由于

PS。操作系统是OSX

2 个答案:

答案 0 :(得分:7)

通过复制代码并将其粘贴到我的控制台中,我可以重现您的问题。

然后我拿了你的哈希并做了以下事情:

hash.first.first
# => "a"
hash.first.first.length
# => 2

!!!

您的"a"似乎有一个不可打印的第一个字符。删除它,你就没事了。

你的char是What is this char? 65279 ''

hash.first.first[0].ord
# => 65279

答案 1 :(得分:2)

您的"a"密钥有BOM(字节顺序标记)作为第一个字符。您需要使用适当的编码打开文件。我猜你说你正在使用UTF-16LE。

File.open('foo', 'rb:BOM|UTF-16LE') do |fi|
  ...
end

有关详细信息,请参阅http://www.ruby-doc.org/core-2.1.1/IO.html#method-c-new-label-IO+Encoding