0

次のコードを出力で実行しました

Erlang R16B (erts-5.10.1) [smp:8:8] [async-threads:10]

Eshell V5.10.1  (abort with ^G)
1> rr(record_io).
[memory]     
2> record_io:store(99).
stored: 2
ok
3> record_io:print().
stored: 2
ok
4> 

私が知りたかったのは、値をレコードに適切に格納する方法です。明らかに、の出力はそうでrecord_io:print().あるべきであり99、そうではないはず2です。ここにコードがあります。

-module(record_io).
-export([store/1, print/0]).
-record(memory, {value}).

store(Value) ->
    #memory{ value = Value},
    io:format("stored: ~p~n",[#memory.value]).

print() ->
    io:format("stored: ~p~n",[#memory.value]).

私はこれを別の方法で試しましたが、それもうまくいきませんでした。

4> c(record_io).
record_io.erl:6: Warning: a term is constructed, but never used
{ok,record_io}
5> rr(record_io).
[memory]
6> record_io:store(S,10).
* 1: variable 'S' is unbound
7> 

変更されたrecord_ioのコード。

-module(record_io).
    -export([store/2, print/1]).
    -record(memory, {value}).

    store(S,Value) ->
        S#memory{ value = Value},
        io:format("stored: ~p~n",[S#memory.value]),
        S.

    print(S) ->
        io:format("stored: ~p~n",[S#memory.value]).

編集:解決策。

コード

-module(record_io).
-export([store/1, print/1]).
-record(memory, {value}).

store(Value) ->
   Rec2 = #memory{ value = Value},
   io:format("stored: ~p~n",[Rec2#memory.value]),
   Rec2.

print(S) ->
   io:format("stored: ~p~n",[S#memory.value]).

コマンドライン。

Rec = record_io:store(99).
record_io:print(Rec).
stored: 99
{memory,99}
stored: 99
ok
4

1 に答える 1

1

Erlangでレコードを変更することはできません。新しいものを作成するだけです。erlangでレコードを変更するにはどうすればよいですか?を参照してください。

于 2013-03-26T23:34:45.723 に答える