State is a modern data location. This is sometimes difficult to remember for two reasons:
- Status means both data in the program and the current point of program execution and "mode".
- We are building it to be some kind of magical thing unnecessarily.
Consider this:
" ?" .
" ?" , , .
, ; , , ( ).
...
, , , , . , , / . , , . - , - . , , .
Erlang , , , , . ( , , Erlang - .)
( ) . , , . , , . : " X ?" , , . .
, , Erlang. , , ETS, DETS, mnesia, db- .. . Erlang - , .
"" ?
- :
has_cheeseburger(BurgerName)
receive
{From, ask, burger_name} ->
From ! {ok, BurgerName},
has_cheeseburger(BurgerName);
{From, new_burger, _SomeBurger} ->
From ! {error, already_have_a_burger},
has_cheeseburger(BurgerName);
{From, eat_burger} ->
From ! {ok, {ate, BurgerName}},
lacks_cheeseburger()
end.
lacks_cheeseburger()
receive
{From, ask, burger_name} ->
From ! {error, no_burger},
lacks_cheeseburger();
{From, new_burger, BurgerName} ->
From ! {ok, thanks},
has_cheeseburger(BurgerName);
{From, eat_burger} ->
From ! {error, no_burger},
lacks_cheeseburger()
end.
? . . IsHoldingBurger receive, , .
, , ( , ) . , , , , , . , " " . OTP , gen_fsm. FSM , , gen_fsm - , , , , . ( , FSM, gen_fsm.)
. ( , , ). OTP gen_fsm .
, , : . . , , , , . , ( C Python), .
Edit
:
loop(State)
receive
{async, Message} ->
NewState = do_something_with(Message),
loop(NewState);
{sync, From, Message} ->
NewState = do_something_with(Message),
Response = process_some_response_on(NewState),
From ! {ok, Response},
loop(NewState);
shutdown ->
exit(shutdown);
Any ->
io:format("~p: Received: ~tp~n", [self(), Any]),
loop(State)
end.
tkowal . Pascal , . . , , , .
, , . .
. , , - , - . . , , , . Python somelist.append(NewElement), , , . Erlang NewList = lists:append(NewElement, SomeList), SomeList - , , , . , , . , . Erlang, , .