Ruby版本 - 2.0给出了此错误
# Convert values to a pair of bytes ...
interface = values[0]
values.collect! { |i| i.to_a.pack('H*') }
使用相同的代码,我们从未在ruby 1.8.7中遇到过这种问题
答案 0 :(得分:3)
从Ruby 1.9.0开始,String#
不再是Enumerable
。你不能简单地迭代String
或将其转换为Array
- 你会迭代什么? Array
的元素是什么?
在不同的上下文中,String
可以解释为
你必须告诉Ruby 你想要什么解释。这就是String
类中各种迭代方法的用途:
还有相应的方法将String
表示为Array
:
请注意,所有这些方法already exist in Ruby 1.8.7以及实际上将String
视为Enumerable
的内容在Ruby 1.8.7中被视为已弃用。
从您的代码中不清楚您到底想要做什么,但我最好的猜测是您正在寻找String#chars
。
答案 1 :(得分:0)
回答您的确切问题
为什么
to_a()
在ruby 2.0中的工作方式与在ruby 1.8.7中的工作方式不同?
因为在ruby 1.8.7中,字符串是可枚举的:https://ruby-doc.org/core-1.8.7/String.html。这意味着它们包含了Enumerable模块,该模块具有方法.to_a
。
在ruby 1.9.3及更高版本中已经不是这样了。这就是原因。
所以要么在任何地方使用ruby 1.8.7,要么改变那些事实检索代码(或其他任何东西),以便不使用now-nothingxistent String#to_a
。