Ruby 为什么可以';我不能从散列中读取值吗?

Ruby 为什么可以';我不能从散列中读取值吗?,ruby,hash,Ruby,Hash,考虑到以下准则: hash = {"a"=>["B", "C"], "b"=>["C"], "c"=>["D", "E"], "d"=>["F"]} puts hash["a"] 这只是不打印任何东西 puts hash["a"].class 这将打印NilClass 在下面的ruby版本中是否存在某种已知的bug ruby 2.0.0p247(2013-06-27修订版41674)[universal.x86_64-darwin13] 我希望有人能帮我,这让

考虑到以下准则:

  hash = {"a"=>["B", "C"], "b"=>["C"], "c"=>["D", "E"], "d"=>["F"]}
  puts hash["a"]
这只是不打印任何东西

puts hash["a"].class
这将打印
NilClass

在下面的ruby版本中是否存在某种已知的bug

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

我希望有人能帮我,这让我发疯。我的IDE是JetBrains的RubyMine。我还试图通过IRB直接运行它

谢谢


PS.OS是OSX

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

然后我拿了你的杂烩,做了如下的事情:

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

您的
“a”
似乎有一个无法打印的第一个字符。删除它,你会没事的

你是:

“a”
键的第一个字符是(字节顺序标记)。您需要使用适当的编码打开文件。我猜你是在和UTF-16LE合作

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

请参阅以获取更多信息。

关于为什么会发生这种情况,没有答案,但为什么不尝试在哈希中使用符号作为索引:
hash={:a=>[“B”,“C”],:B=>[“C”],:C=>[“D”,“E”],:D=>[“F”]}
这样
就可以放置哈希[:a]
工作了。谢谢您的评论。我没有这样做,因为我正在动态设置键。使用字符串Aha的
.tosym
方法设置键,效果很好。但是看看下面的答案。这也会将奇怪的65279转换为符号..是的,您的输入似乎有问题,您应该在将其转换为哈希之前对其进行清理:/Pfff调试数小时后,情况似乎就是这样。。我正在从.txt文件中读取值。我不知道该怎么解决这个问题。。太好了,无论如何谢谢哇,这太了不起了。如果我在文件的开头添加一个空行,一切正常。@SjaakRusma或者您可以在读取文件时尝试:使用十六进制编辑器删除BOM表。遗憾的是,像File.open('foo','rb:BOM | UTF-16LE')do | fi |这样的操作不起作用。
File.open('foo', 'rb:BOM|UTF-16LE') do |fi|
  ...
end