Ruby undefined 方法 'length' for nil:NilClass



我知道这是一个常见的问题,但是在阅读了其他堆栈溢出问题之后,我就是不明白。

例:我正在为一系列数字编写一个最不常见的多重函数(欧拉项目 #5),我无法弄清楚为什么其中一个有效而另一个会抛出错误:

工程:

fact_list2 = fact_list2.reject {|i| i == reject1}
count2 = length2 - fact_list2.length()

抛出错误 nil:NilClass (NoMethodError) 的未定义方法 'length' :

count2 = length2 - fact_list2.reject! {|i| i == reject1}.length()

在此之上,我检查了fact_list2是一个数组,但它似乎没有任何区别。 我在这里错过了什么?

reject! 仅在进行了更改时才返回数组,否则返回 nil

http://ruby-doc.org/core-2.0.0/Array.html#method-i-reject-21

假设您需要fact_list2永久拒绝这些值,您可能需要将其保留为两行,尽管您仍然可以使用 reject! 缩短它:

fact_list2.reject! {|i| i == reject1}
count2 = length2 - fact_list2.length()

相关内容