如果未调用

时间:2015-09-03 00:14:00

标签: elixir

我有一个问题,我有这个模块

defmodule Example do

  IO.puts "Creating a function"

  def sum(a, b) do
      a + b
  end

  IO.puts "End of the function”
end

当我使用elixirc example.ex编译它时,我得到了这个

Creating a function
End of the function

为什么呢?我只是编译文件,我不是从任何地方调用这个模块

1 个答案:

答案 0 :(得分:4)

在Elixir 中定义模块执行该模块内的代码。实际上,即使是“def”本身也只是一个获取函数内容并将它们存储在某处的宏。一切都是表达。这就是为什么你可以,例如,执行条件定义:

defmodule Example do
  if true do
    def sum(a, b) do
      a + b
    end
  end
end

这就是为什么代码按照你看到的方式工作的原因。

PS:elixir和elixirc将显示相同的行为,因为它们之间的唯一区别是,一个将.beam文件写入磁盘,另一个不写。