Ruby的“未定义方法'长度'为#

时间:2014-07-15 05:35:26

标签: ruby gem

我有一个包含三个NetAddr :: CIDR对象的数组,并尝试使用NetAddr模块的cidr_sort方法对其进行排序(http://rubydoc.info/gems/netaddr/1.5.0/NetAddr#cidr_sort-class_method

当我从我的班级中调用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_shortcuts.rb:216:in 'cidr_sort': undefined method 'length' for #<NetAddr::CIDRv4:0x007f55cbae0088> (NoMethodError)

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

我还尝试使用sort_byNetAddr::cidr_sort(@component_nets)并获得相同的错误。

length方法试图调用它时,为什么Ruby告诉我cidr_sort未定义,但我可以在我的代码中调用它而没有问题?

1 个答案:

答案 0 :(得分:0)

  def sort_component_nets
      component_nets_sorted = @component_nets.sort
  end

这里Ruby认为您正在尝试在方法块中创建局部变量,但我假设您实际上想要访问块外部的方法component_nets_sorted。要这样做:你必须添加自我。它的前缀。

  def sort_component_nets
      self.component_nets_sorted = @component_nets.sort
  end