undefined方法`to_a'代表“ens160”:字符串

时间:2017-06-29 06:43:43

标签: ruby

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中遇到过这种问题

2 个答案:

答案 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