我有一个包含三个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_by
和NetAddr::cidr_sort(@component_nets)
并获得相同的错误。
当length
方法试图调用它时,为什么Ruby告诉我cidr_sort
未定义,但我可以在我的代码中调用它而没有问题?
答案 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