【发布时间】:2022-01-13 11:17:10
【问题描述】:
我目前正在尝试根据其默认实现定义和使用我自己稍微调整的receive 宏。作为一个经典的例子,假设我想在每次进程开始从邮箱接收消息时记录。我可以定义我自己版本的 receive 宏来进行日志记录,然后调用/使用默认的 receive 宏并将这个自定义接收导入到我现有的代码中吗?
以下是一个无效的示例,以更好地说明我想要实现的目标:
defmodule MyWeirdReceive do
def receive(args) do
IO.puts "I just started receiving a message from the mailbox"
Kernel.SpecialForms.receive(args)
end
end
defmodule Stack do
import Kernel, except: [receive: 1]
import MyWeirdReceive
def loop(state, ctr) do
receive do
{_from, :push, value} ->
loop([value | state], ctr + 1)
{from, :pop} ->
[h | t] = state
send(from, {:reply, h})
loop(t, ctr)
end
loop(state, ctr)
end
end
【问题讨论】:
标签: macros elixir actor extends