如何将参数传递给gen_server函数?

古加·梅尔卡泽(Guga Melkadze)

我有一个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)我该如何实现?

乐高积木

更改increment函数以发送一个元组而不是一个原子:

increment(N) ->
    gen_server:call(?MODULE, {increment, N}).

并更新该handle_call子句以使用它:

handle_call({increment, N}, _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 + N)).

请注意,您的handle_call函数不会返回gen_server行为所期望的值类型,因此此过程可能会在每次请求后崩溃。您应该在最后一行添加如下内容:

{reply, ok, File}.

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将函数作为参数传递给参数?

来自分类Dev

如何将函数作为参数传递给transform()函数?

来自分类Dev

如何将字段构造函数参数传递给函数?

来自分类Dev

如何将空参数传递给python函数?

来自分类Dev

如何将初始参数传递给javascript函数

来自分类Dev

如何将通道作为参数传递给函数?

来自分类Dev

如何将函数参数传递给boost :: async()

来自分类Dev

Javascript:如何将参数传递给回调函数

来自分类Dev

如何将参数传递给静态类构造函数?

来自分类Dev

如何将值传递给函数的左侧参数?

来自分类Dev

如何将参数传递给funscript函数?

来自分类Dev

如何将值传递给函数的左侧参数?

来自分类Dev

如何将表格参数传递给此函数?

来自分类Dev

Python:如何将列表作为参数传递给函数?

来自分类Dev

如何将动态类型的参数传递给函数?

来自分类Dev

如何将参数传递给“然后”函数

来自分类Dev

如何将很多参数传递给几个函数

来自分类Dev

如何将参数作为函数传递给变量?

来自分类Dev

如何将参数传递给javascript函数

来自分类Dev

如何将向量作为函数参数传递给指针

来自分类Dev

如何将函数传递给julia Gadfly Theme参数

来自分类Dev

Javascript:如何将值传递给函数参数?

来自分类Dev

如何将参数传递给对象文字中的函数

来自分类Dev

如何将参数传递给React js中的函数?

来自分类Dev

如何将结构作为参数传递给函数?

来自分类Dev

如何将参数传递给AWS Lambda函数

来自分类Dev

如何将函数作为参数传递给OpenSCAD模块?

来自分类Dev

如何将元组作为参数传递给divmod()函数

来自分类Dev

如何将参数传递给PyQt QThreadPool运行函数

Related 相关文章

热门标签

归档