私はErlangを学んでおり、プロセス内で状態を保存する方法と保存する方法を理解しようとしています.
たとえば、ファイル内の数値のリストを指定して、そのファイルに数値が含まれているかどうかを通知するプログラムを作成しようとしています。私のアプローチは、2つのプロセスを使用することです
ファイルの内容をセットに読み込み、数字がチェックされるのを待ってから、それらがセットに含まれているかどうかを返信するキャッシュ。
is_member_loop(Data_file) -> Numbers = read_numbers(Data_file), receive {From, Number} -> From ! {self(), lists:member(Number, Numbers)}, is_member_loop(Data_file) end.
番号をキャッシュ
true
に送信し、またはfalse
応答を待機するクライアント。check_number(Number) -> NumbersPid ! {self(), Number}, receive {NumbersPid, Is_member} -> Is_member end.
ファイルはリクエストごとに読み取られるため、このアプローチは明らかに単純です。しかし、私はErlangにまったく慣れていないため、異なるリクエスト間で状態を維持するための好ましい方法が何であるかは不明です.
プロセス辞書を使用する必要がありますか? そのようなプロセス状態について、私が認識していない別のメカニズムはありますか?
アップデート
user601836で提案されているように、最も明白な解決策は、一連の数値をis_member_loop
ファイル名の代わりにパラメーターとして渡すことです。これは Erlang の一般的なイディオムのようで、素晴らしいオンライン ブックLearn you some Erlangに良い例があります。
ただし、プロセスで保持したいより複雑な状態についても、問題は依然として当てはまると思います。