ETSモジュールへのアクセスで簡単なErlangプロセスを作成しようとしています。Erlang ETS挿入/ 2エラー
私のソースコードが含まれています:
プロセスの作成:
start_message_channel() -> Table = ets:new(messages, [ordered_set, named_table]), Channel = spawn(?MODULE, channel, []), {Channel, {table, Table}}.
プロセスロジック:プロセス
とchannel() -> receive {Sender, {send_message, {Message, Table}}} -> ets:insert(Table, {message, Message}), Sender ! {self(), {status, success}}; {Sender, {receive_message, Table}} -> {message, Message} = ets:first(Table), Sender ! {self(), {status, {success, Message}}}; _ -> throw(incorrect_protocol_exception) end.
コミュニケーションErlangの端末に関数呼び出しを実行している間
、私は取得していますエラー:
1> cd("C:/Users/dauma").
C:/Users/dauma
ok
2> c(message_channel).
{ok,message_channel}
3> Object = message_channel:start_message_channel().
{<0.59.0>,{table,messages}}
4> message_channel:send_message_to_message_channel(Object, "Hello World!").
=ERROR REPORT==== 19-May-2016::11:09:27 ===
Error in process <0.59.0> with exit value:
{badarg,[{ets,insert,[messages,"Hello World!"],[]},
{message_channel,channel,0,
[{file,"message_channel.erl"},{line,35}]}]}
は、誰がどこであるかもしれない、問題を教えてください。
ありがとうございました!あなたが示唆した小さな変更の後、すべてが魅力のように動作します!理解を深めるために、私の例では、テーブルの更新を作成したのと同じプロセスではないことを伝えることができますか? –
#1でテーブルを作成し、チャネル/ 0を実行するプロセスを生成します。それは挿入を行うプロセスなので、プライベートでは動作しません。 –
はい、デフォルトは 'protected'です。 – rvirding