如何解决Elixir与函数名称一起使用
最近我偶然发现了这段代码
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
以接受参数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。