Macros Elixir quote/unquote和宏行为
我有两个版本的Macros Elixir quote/unquote和宏行为,macros,elixir,Macros,Elixir,我有两个版本的\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。此代码不能正常工作(实际上,它不导入任何内容) 这是工作版本,但是,我不喜欢有两个独立的quote部分 defmodule SomeModule do defmacro __using__(opts \\ []) do if Keyword.has_key?(opts, :my_key) && o
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。此代码不能正常工作(实际上,它不导入任何内容)
这是工作版本,但是,我不喜欢有两个独立的quote
部分
defmodule SomeModule do
defmacro __using__(opts \\ []) do
if Keyword.has_key?(opts, :my_key) && opts[:my_key] == 3 do
quote do
import MyModuleOne
end
else
quote do
import MyModuleTwo
end
end
end
end
第一个应该如何重写才能正常工作?这是一个棘手的问题!我花了一段时间才弄明白原因
在讨论原因之前,让我向您保证,您的宏是完全有效的,Elixir的工作原理与您所说的完全相同
我尝试展开你发布的两个宏,得到了相同的结果,即导入了正确的东西。但是为什么它不能像你期望的那样工作呢
这就是为什么
重要的是要注意import/2是词法的
从导入的文档中
让我给你们看两个例子
iex(1)> import Enum, only: [into: 2]
Enum
iex(2)> into [a: 1], %{}
%{a: 1}
iex(3)>
而且
iex(1)> if true do
...(1)> import Enum, only: [into: 2]
...(1)> end
Enum
iex(2)> into [a: 1], %{}
** (CompileError) iex:2: undefined function into/2
导入只在您编写的子句中生效:)这是一个棘手的问题!我花了一段时间才弄明白原因
在讨论原因之前,让我向您保证,您的宏是完全有效的,Elixir的工作原理与您所说的完全相同
我尝试展开你发布的两个宏,得到了相同的结果,即导入了正确的东西。但是为什么它不能像你期望的那样工作呢
这就是为什么
重要的是要注意import/2是词法的
从导入的文档中
让我给你们看两个例子
iex(1)> import Enum, only: [into: 2]
Enum
iex(2)> into [a: 1], %{}
%{a: 1}
iex(3)>
而且
iex(1)> if true do
...(1)> import Enum, only: [into: 2]
...(1)> end
Enum
iex(2)> into [a: 1], %{}
** (CompileError) iex:2: undefined function into/2
导入只在您编写的子句中生效:)Huh,您是对的:)使用其他函数检查-确认:)Huh,您是对的:)使用其他函数检查-确认:)