Tan*_*ano 0 erlang functional-programming elixir erlang-otp gen-server
我是Elixir的新手,正在阅读一本书并做一些例子.这是让我在这里提问的一段代码:
defmodule Sequence.Server do
use GenServer
def init(initial_number)do
{:ok,initial_number}
end
def handle_call(:next_number, _from, current_number)do
{:reply, current_number,current_number+1}
end
end
Run Code Online (Sandbox Code Playgroud)
据我所知,在初始化服务器时调用init函数,我们正在定义一些参数 - 这将是服务器的初始状态.令我困惑的是,current_number和initial_number是如何相互关联的,我的意思是在代码中没有我们说的那样的东西
current_number = initial_number
因为当我调用GenServer.call(some_process_id, :next_number)
它时从100开始,例如,如果start_link的参数是100.如果我们在初始状态和current_number
参数之间没有任何映射,Elixir如何理解它必须从100开始
一个目的init/1
是建立一个内部状态GenServer
.修改这个GenServer
内部状态的唯一方法是通过call
-ing,cast
-ing或发送常规消息(然后由handle_info/2
回调处理).
这些函数(分别为handle_call/3
和handle_cast/2
)将被调用,其GenServer
内部状态作为函数参数的最后一个参数传入.
考虑一下场景:
GenServer
数字100
.call
更具体的)GenServer
- :next_number
.handle_call(:next_number, _from, current_number)
回调函数,current_number
其初始值为100
.{:reply, current_number,current_number+1}
,您应该理解为:( reply
元组的第一个元素)表示它将回复调用者; 元组的第二个元素将是返回给调用者的值(在这种情况下,它将是数字100
); 和元组的最后一个元素将是一个新的状态GenServer
- current_number+1
,所以101
.:next_number
call
时GenServer
,它将遵循前面的步骤,除了现在的内部状态101
,并且从函数返回后,新状态将是102
,等等... 归档时间: |
|
查看次数: |
137 次 |
最近记录: |