Ruby 为什么reduce实现返回未定义的方法&x2B;对于nil:NilClass,一旦布尔检查返回true
我需要找到所有数字的和,这些数字等于它们的数字的阶乘和。我有一个算法:Ruby 为什么reduce实现返回未定义的方法&x2B;对于nil:NilClass,一旦布尔检查返回true,ruby,Ruby,我需要找到所有数字的和,这些数字等于它们的数字的阶乘和。我有一个算法: def equal_to_sum_of_factorial_digits?(n) n == n.to_s.scan(/\d/).map{|s| s.to_i}.reduce{|acc,j| (j == 0 || j == 1) ? 1 : acc + (1..j).inject(:*)} end start = Time.now answer = (10..145).reduce {|acc,j| acc + j if
def equal_to_sum_of_factorial_digits?(n)
n == n.to_s.scan(/\d/).map{|s| s.to_i}.reduce{|acc,j| (j == 0 || j == 1) ? 1 : acc + (1..j).inject(:*)}
end
start = Time.now
answer = (10..145).reduce {|acc,j| acc + j if equal_to_sum_of_factorial_digits?(j)}
puts "The answer is #{answer} and it took #{(Time.now-start)*1000} milliseconds."
在这里,equal\u\u to\u sum\u of_factorial\u digits?
将一个数字变成独立的数字,然后如果它是1
或0
(1或0 factorial是1),或者如果它是2
直到9
,则加上值1
。然后,答案对具有该属性的范围内的所有值求和
代码一直工作到我大于145为止(145是第一个值,它的属性是它等于它的阶乘数字之和:145=1!+4!+5!),它给出了nil:NilClass的错误未定义方法“+”
我不知道为什么answer=
之后的代码在equal\u to\u sum\u factorial\u位?
方法返回true
时失败。有人能告诉我吗?这是因为在reduce
的上一次迭代中,acc
由于被计算为nil
的块而一直是nil
。请注意,acc
的值是每个迭代块的评估值。Oh当然。我必须保持acc
如果因子数的和等于?返回false。这是有效的:answer=(10..145)。将(0){acc,j |等于{u阶乘}位的{u和}acc+j:acc}
。谢谢!您不必异常地处理j==1
情况。