2013-03-26 5 views
0

는 내가 알고 싶어 분명히 record_io:print().의 출력이 99하지 2을 했어야, 내가 제대로 기록에 값을 저장하는 방법은 무엇 출력Erlang : 레코드에 데이터를 올바르게 저장하고 검색하고 있습니까?

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> 

에 다음 코드를 실행했습니다. 코드를 heres.

-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]). 

나는 다른 방법으로 시도해도 작동하지 않았다.

수정 된 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 

답변

1

얼랭의 레코드는 수정할 수 없습니다. 새로운 것들만 생성. How do I modify a record in erlang?

+0

커맨드 라인'Rec2 = Rec1 # memory {value = 99}'에 레코드를 사용하고 그것을 함수 호출'store (Rec2) '에 전달합니까? – pandoragami

+0

새로 생성 된 구조체 – GabiMe

+0

"S # memory {value = 99}"레코드가 S를 언 바인딩하고 store (S, Value)와 같은'S '를 전달할 수 없다.)'처음에. – pandoragami

관련 문제