GenServer 中的回调函数

Posted

技术标签:

【中文标题】GenServer 中的回调函数【英文标题】:Callbacks function in GenServer 【发布时间】:2016-08-27 05:28:59 【问题描述】:

我是 Elixir 的初学者,我正在尝试了解如何使用 GenServer。对我来说神奇的是:

defmodule Stack do
  use GenServer

  # Callbacks

  def handle_call(:pop, _from, [h|t]) do
    :reply, h, t
  end

  def handle_cast(:push, item, state) do
    :noreply, [item|state]
  end
end

代码取自 GenServer 文档。为什么当回调函数返回:reply, h, t时,call函数只返回一个值?

#Start the server
:ok, pid = GenServer.start_link(Stack, [:hello])

# This is the client
GenServer.call(pid, :pop)
#=> :hello #<<<<Why?

:reply, h, t不是返回值吗?

【问题讨论】:

【参考方案1】:

:reply, h, t 不是返回值吗?

:reply, h, thandle_call 的返回值,但您没有调用该函数。你正在调用GenServer.call,它在内部调用handle_call,将消息、调用者和当前状态传递给它,如果handle_call返回一个:reply, a, b的3元组,它会发回第二个参数,在这个将a 发送给调用者,并将其状态更改为b

【讨论】:

以上是关于GenServer 中的回调函数的主要内容,如果未能解决你的问题,请参考以下文章

js中的回调函数,什么是回调函数?

JS中的 回调函数(callback)

如何在外面引用js中ajax回调函数中的值

进程池中的回调函数

java里面,c里面都有回调函数,回调函数都是啥东西啊???

jquery 中的回调函数,回调函数(callback)是什么?