Ruby“未定义的

Ruby“未定义的,ruby,gem,Ruby,Gem,我有一个由三个NetAddress::CIDR对象组成的数组,正在尝试使用NetAddress模块的CIDR_排序方法对它们进行排序 当我从类中调用sort方法时,如下所示: Class IPv4SummaryNet attr_accessor :component_nets @component_nets = [] def add_net(net) @component_nets = component_nets.to_a.push(net) end def

我有一个由三个NetAddress::CIDR对象组成的数组,正在尝试使用NetAddress模块的CIDR_排序方法对它们进行排序

当我从类中调用sort方法时,如下所示:

Class IPv4SummaryNet
  attr_accessor :component_nets
  @component_nets = []

  def add_net(net)
      @component_nets = component_nets.to_a.push(net)
  end

  def sort_component_nets
      component_nets_sorted = @component_nets.sort
  end
  ...
end
我得到以下错误:/usr/local/lib/ruby/gems/2.1.0/gems/netaddr-1.5.0/lib/cidr\u快捷方式。rb:216:in'cidr\u sort':NoMethodError的未定义方法'length'

但是如果我从程序中打印数组长度,我会得到正确的值3

我还尝试使用sort_by和NetAddr::cidr_sort@component_nets并得到相同的错误

为什么Ruby告诉我,当cidr_排序方法试图调用它时,长度是未定义的,而我可以在代码中毫无问题地调用它

  def sort_component_nets
      component_nets_sorted = @component_nets.sort
  end
在这里,Ruby认为您试图在方法块内创建一个局部变量,但我假设您实际上想要访问块外的方法组件。要做到这一点:你必须添加自我。它的前缀

  def sort_component_nets
      self.component_nets_sorted = @component_nets.sort
  end

该错误不是因为阵列中缺少方法,而是因为NetAddress::CIDRv4I的实例中出现了错误。我不确定我是否理解该错误@component_nets是传递给cidr_排序方法的NetAddress::CIDRv4对象数组。然后,cidr_sort在ArrayEvently not上调用length方法-要么你不传递你认为传递的,要么该方法不做你认为它做的…我传递的正是NetAddress模块的文档所说的方法要寻找的,但显然该方法不做文档所声称的。我将编写我自己的方法来对数组进行排序,我试图在方法块中创建一个局部变量