如何在Elixir应用程序中运行单个函数?

Cri*_*cia 2 elixir

我需要main为我的项目创建一个等效的函数.我需要为项目添加一些依赖项,并使用它们来运行单个函数.我真的不需要一个OTP应用程序,所以我认为这样定义它(与主管和一切)将是一个矫枉过正.

我做了一个测试,并把它放在mix.ex这样的,它的工作原理

def application do
  MyModule.main

  [applications: [:logger]]
end
Run Code Online (Sandbox Code Playgroud)

但感觉不自然.有更标准的方法吗?

编辑:

将其放入内部application仅在第一次由于某种原因编译时才起作用.

Jas*_*son 5

mod为mix.exs application函数添加一个选项:

def application do
  [
    mod: {MyModule, []}, 
    applications: [:logger]]
    ...
  ]
end
Run Code Online (Sandbox Code Playgroud)

然后在该模块中实现Application行为:

defmodule MyModule do
  use Application

  def start(_type, _args) do
    IO.puts "starting"
    # some more stuff
  end
end
Run Code Online (Sandbox Code Playgroud)

而不是main您在示例中指定的函数,我会使用该start函数,因为它是公认的做法.但是,如果您必须使用该main功能,我相信有一种方法可以覆盖它.只需看看Application行为的文档.