0

これがよくある質問であることは知っていますが、他のスタック オーバーフローに関する質問を読んだ後では、わかりません。

例: ある範囲の数値に対する最小公倍数関数 (Project Euler #5) を作成していますが、これらの関数の 1 つが機能し、もう 1 つがエラーをスローする理由がわかりません。

作品:

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

nil:NilClass (NoMethodError) に対して未定義のメソッド「長さ」のエラーをスローします。

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

この上で、fact_list2 が配列であることを確認しましたが、違いはないようです。ここで何が欠けていますか?

4

1 に答える 1

2

reject!変更が行われた場合にのみ配列を返し、それ以外の場合は を返しますnil

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

これらの値を永久に拒否する必要があると仮定するとfact_list2、2 行に抑える必要があるかもしれませんが、次のように短縮することはできますreject!

fact_list2.reject! {|i| i == reject1}
count2 = length2 - fact_list2.length()
于 2013-10-03T16:19:22.110 に答える