Elixir 如果未调用,为什么IO.会将打印内容放入模块中的终端

Elixir 如果未调用,为什么IO.会将打印内容放入模块中的终端,elixir,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 为什么??我只是编译了这个文件,并没有从任何地方调用这个模块在

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

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

为什么??我只是编译了这个文件,并没有从任何地方调用这个模块

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

defmodule Example do
  if true do
    def sum(a, b) do
      a + b
    end
  end
end
这就是为什么代码以您所看到的方式工作


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

我想说您弄错了,它也在运行它。:-)你确定你做了“长生不老药”而不是“长生不老药”?是的,我确定,事实上,我做了长生不老药和长生不老药谢谢,我有这个想法,但我不确定。现在我确信一切都是一个表达式并返回一个值。