【发布时间】:2018-12-14 20:00:09
【问题描述】:
我是 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
据我所知,init 函数在服务器初始化时被调用,我们正在定义一些参数 - 这将是服务器的初始状态。让我感到困惑的是 current_number 和 initial_number 是如何相互关联的,我的意思是在我们所说的代码中没有任何地方
current_number = initial_number
因为当我调用GenServer.call(some_process_id, :next_number) 时,它从 100 开始,例如,如果 start_link 的参数是 100。当我们在初始值之间没有任何映射时,Elixir 如何理解它必须从 100 开始状态和current_number 参数
【问题讨论】:
-
我想推荐一本伟大的 LYSE 书,特别是章节 learnyousomeerlang.com/more-on-multiprocessing 和 learnyousomeerlang.com/what-is-otp 和 learnyousomeerlang.com/clients-and-servers 以了解如何编写 gen_server(和其他 gen_* 抽象)。强烈推荐阅读整本书,这也很有趣:)
-
谢谢大家:)
标签: functional-programming erlang elixir erlang-otp gen-server