elixir - 如果未调用 IO.puts,为什么打印到模块中的终端

标签 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

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

最佳答案

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

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

这就是代码以您所见的方式工作的原因。

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

关于elixir - 如果未调用 IO.puts,为什么打印到模块中的终端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32365130/

相关文章:

elixir - 如何对 Elixir REPL、iex 进行垃圾回收?

elixir - 在Elixir,Phoenix中,如何将其他模块中的 session 作为一个模块使用Phoenix.Channel?

elixir - 在 Phoenix 响应中设置 X-Frame-Options

mongodb - docker-compose mongodb phoenix,[错误]无法连接:**(Mongo.Error)tcp连接:连接被拒绝-:econnrefused

ssh - 如何在 Elixir 中通过 SSH 执行命令?

postgresql - 寻找下一个生日来庆祝

elixir - 有没有办法使用 ExUnit 中的共享示例?

elixir - Ecto 中的嵌套预加载

erlang - 如何通过在 Elixir 中调用进程来捕获或挽救被调用进程的崩溃错误

Elixir:如何处理 "environment"