Elixir中Code.compile_quoted / 2的第二个参数

时间:2018-01-12 12:00:59

标签: elixir

此Elixir函数中第二个参数的含义是什么?

Code.compile_quoted(quoted, file \\ "nofile")

我试着像这样使用它,

q = quote do
  defmodule A do
    def hello, do: IO.puts "hello from A"
  end
end
Code.compile_quoted(q, "Elixir.A.beam")

但未创建文件Elixir.A.beam

由于

1 个答案:

答案 0 :(得分:1)

这主要是编译器为反向报告构建环境的内部功能。它与梁无关,它是在需要时将其吐出给用户的相关文件名。

q = quote do
  defmodule A do
    def hello do
      IO.puts "hello from A (" <> __ENV__.file <> ")"
    end
  end
end
Code.compile_quoted(q, "my_file.ex")
A.hello

#⇒ hello from A (my_file.ex)
#                ⇑⇑⇑⇑⇑⇑⇑⇑⇑⇑

invoked by compiler internally时,它会在那里传递真实的文件名。