Ruby“未定义的
我有一个由三个NetAddress::CIDR对象组成的数组,正在尝试使用NetAddress模块的CIDR_排序方法对它们进行排序 当我从类中调用sort方法时,如下所示: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
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模块的文档所说的方法要寻找的,但显然该方法不做文档所声称的。我将编写我自己的方法来对数组进行排序,我试图在方法块中创建一个局部变量