【发布时间】:2016-11-17 16:05:21
【问题描述】:
我有一个gen_server,每次调用increment() 函数时计数器都会递增。
-module(genserver).
-export([start_link/0, start/0, increment/0]).
-behaviour(gen_server).
-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]).
init([]) ->
{ok, "counter.txt"}.
start() ->
gen_server:start({local, ?MODULE}, ?MODULE, [], []).
increment() ->
gen_server:call(?MODULE, increment).
handle_call(increment, _From, File) ->
Counter = case file:read_file(File) of
{ok, Binary} -> binary_to_integer(Binary);
{error, enoent} -> 0
end,
ok = file:write_file(File, integer_to_binary(Counter + 1)).
handle_cast(_Req, State) ->
{noreply, State}.
handle_info(_Info, State) ->
{noreply, State}.
terminate(_Reason, _State) ->
ok.
code_change(_OldVsn, State, _Extra) ->
{ok, State}.
这里是shell执行示例
Eshell V7.3 (abort with ^G)
1> c("C:/Users/guga.melkadze/Desktop/testgen").
{ok,testgen}
2> testgen:start().
{ok,<0.39.0>}
3> testgen:increment().
920
4> testgen:increment().
921
5> testgen:increment().
922
现在我每次调用genserver:increment() 方法时都需要发送一个参数。例如genserver:increment(someParameter)。我如何做到这一点?
【问题讨论】:
标签: parameters erlang erlang-otp gen-server