以下のコードは、配列をループし、factor_list
それぞれに指定された変数が含まれているかどうかを確認します。その場合、それらを配列から削除し、それらを乗算して、変数に関して最終結果を合計します。すべての操作の後、因子を配列に追加して戻します。
temp_factor = nil
factor_list.each{|factor|
if factor._variables.include?(variable)
if temp_factor == nil
temp_factor = factor
else
temp_factor = multiply(temp_factor, factor)
end
factor_list.delete(factor)
end
}
temp_factor = sumOut(temp_factor, variable)
factor_list << temp_factor
問題は、前のループで設定されていたとしても、すべての反復でtemp_factor
常に発生することです。nil
主な問題はアレイの削除によるものだと思ったので、テストのために削除を削除したところ、問題は解決しました(もちろん、アレイはゴミでいっぱいです)。したがって、私temp_factor
はオブジェクトの浅いコピーであり、その参照オブジェクトは元のオブジェクトと一緒になくなったという結論に達しました。次に、マーシャル トリックを使用してディープ コピーを試みましたが、役に立ちませんでした。
問題を解決できなかったので、これですべてです。これらすべての神話の背後にあるメカニズムを特定するのを手伝ってくれる人はいますか?
問題を回避するためにコードを書き直すことについて、皆さんがとても良いアドバイスをくれて本当に助かりました! しかし、私はまだ上記の問題を引き起こしたのだろうかと思っていますか? そのちょっとした情報を知ることができればいいですね!