问题描述
最近我偶然发现了这段代码
defmodule MyAppWeb.PageLive do
use MyAppWeb,:live_view
它是使用Phoenix Live View(mix phx.new --live
)生成的默认应用程序的一部分。
这是我第一次看到带有函数名称作为第二个参数的use
构造。
我试图在网上搜索有关此文档的一些文档,但是找不到合适的名称。
您能帮助我了解执行此操作时会发生什么情况吗?
它不会调用__using__
宏,而是调用一个函数,而且我不确定是否可以在其中传递一些选项,或者我是否需要使用“常规”方式(对于{{1} }宏)。
我已经尝试过类似__using__
的方法,但是会提高use MyAppWeb,:live_view,opts
解决方法
__using__/1
只是一个宏,而use Mod,args
只是Mod.__using__(args)
的语法糖。
它不调用
__using__/1
宏,而是调用一个函数[...]
说明错误,它调用MyAppWeb.__using__/1
宏。
如果您打开(也生成的)MyAppWeb
,则会在其中找到类似的内容
defmacro __using__(which) when is_atom(which) do
apply(__MODULE__,which,[])
end
也就是说,您可以直接调用which
,也可以修改MyAppWeb.__using__/1
以接受参数。