我想知道 Active Job 类是否有任何命名约定。我看到了不同的变体。例如,verb + noun job喜欢SendNotificationJob,SendNewUserInvitationJob或anything + noun喜欢TweetNotifictorJob,GuestsCleanupJob。你们给工作命名的规则是什么?
我现在正在学习 Elixir,我真的很困惑quote和unquote。以下是我们如何使用 a 创建具有动态名称的函数macro:
defmacro create_fun(n) do
quote do: def unquote(:"times_#{n}")(a), do: a * 4
end
Run Code Online (Sandbox Code Playgroud)
times_6例如,如果我6作为宏参数传递,它会创建 function 。
现在我不明白的是:这里我们取消引用atom :"times_#{n}"。Elixir 文档说,当你引用一个原子时,它会返回一个原子。所以当我取消引用一个原子时,我也应该找回这个原子。这是真的:
iex(15)> Macro.to_string quote do: unquote(:"times_6")
":times_6"
Run Code Online (Sandbox Code Playgroud)
但是()在引用之后使用会给出这样的结果:
iex(14)> Macro.to_string quote do: unquote(:"times_6")()
"times_6()"
Run Code Online (Sandbox Code Playgroud)
带括号的原子突然就不再是原子了。如果我unquote(:"times_6")用:"times_6"它代替则不起作用:
iex(4)> Macro.to_string quote do: :"times_6"()
** (SyntaxError) iex:4: syntax error before: '('
Run Code Online (Sandbox Code Playgroud)
请问这是怎么回事,没明白