ErlangTuples
で操作する特定の関数は、操作後に新しいタプルのコピーになります。ほとんどの場合、プログラムは、新しいタプルのコピーが作成された古いタプルのコピーには関心がありません。例を見てみましょう:
size(Tuple1)> 10、Position <10->の場合、change(Position、Tuple1、NewValue) NewTuple = erlang:setelement(Position、Tuple1、NewValue)、%%この時点でTuple1 は必要ありません%%この時点でTuple1 を破棄したいです! %% どうすればいいのですか erlang:send(myprocess、NewTuple)、 わかった。
上記の例では、既存のタプルから新しいタプルを作成します。後でこれを行う場合は、古いコピーを自分で破棄したいと思います。コンパイラ/ランタイムシステムがこれを自動的に行うように感じますが、そうであれば、次のような関数は提供されませんでしたerlang:garbage_collect/0
。暗黙的にメモリを管理する必要があるかもしれないことを彼らは理解していると確信しています。おそらく、プログラムがクラッシュするのを防ぎ、コードのメモリを大量に消費する部分を通り過ぎてしまうでしょう。
で、を使用して変数を忘れさせることができることを理解してerlang shell
います(変数を破棄することを意味していると想定しています)f/0, f/1
。ただし、モジュール/関数でこれを使用できないようです。また、その変数名の前にアンダースコアを付けると、ランタイムシステムによる破棄が早まる可能性があることにも疑問があり_Tuple1
ますTuple1
。要約すると、問題は、後で既存のタプルからタプルを作成し、各ステップで古いコピーをすぐに(自分で)破棄したい場合、どうすればよいですか? *注*効率ガイドではこれが禁止されていることを理解していますが、選択の余地がない場合は.....
みんな助けて、これに対するあなたの解決策は何ですか?ありがとう