2013-10-03 50 views
0

我知道,这是一个常见的问题,但通过其他堆栈溢出问题看完之后,我只是不明白这一点。红宝石未定义的方法'长”的零:NilClass

例子: 我正在写一最小公倍数功能的数字范围(项目欧拉#5),我想不通为什么这些作品之一,而另一个引发错误:

工作原理:

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

引发Error未定义的方法`长度”的零:NilClass(NoMethodError):

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

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

+0

整数已经有一个[LCM方法](http://www.ruby-doc.org/core-1.9.3/Integer.html#method-i-lcm)。 – steenslag

+0

阵也有可能是这种操作的有用的计数方法。 – hirolau

+0

是的,我想通过建设自己的LCM方法来学习的Ruby语法。不知道计数方法,所以非常感谢 – toppy42

回答

2

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() 
相关问题