【问题标题】:Callbacks function in GenServerGenServer 中的回调函数
【发布时间】: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}不是返回值吗?

【问题讨论】:

    标签: elixir gen-server


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-03-27
      • 2019-05-08
      • 1970-01-01
      • 2017-03-06
      • 1970-01-01
      • 2021-03-03
      • 2018-07-08
      • 2019-01-28
      • 2020-01-30
      相关资源
      最近更新 更多