2016-01-28 30 views
2

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

我做了一个测试,并把它放在mix.ex喜欢这个和它的作品

def application do 
    MyModule.main 

    [applications: [:logger]] 
end 

但感觉不自然。有没有更标准的方法来做到这一点?

编辑:

把它里面application只能在第一次编译出于某种原因。

回答

5

添加mod选项,您mix.exs application功能:

def application do 
    [ 
    mod: {MyModule, []}, 
    applications: [:logger]] 
    ... 
    ] 
end 

然后你实现一个模块中的应用程序行为:

defmodule MyModule do 
    use Application 

    def start(_type, _args) do 
    IO.puts "starting" 
    # some more stuff 
    end 
end 

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

0

我喜欢Jason的答案,但他回答之前,我问的松弛,并来到了这个答案:

只要你的项目的任何地方创建一个模块(此上是在lib文件夹),该Mix.Tasks

下筑巢
defmodule Mix.Tasks.MyTask do 
    def run(args) do 
    #Do some stuff once 
    end 
end 

并从命令行外部像这样运行它mix my_task。好的是你可以传递可选的参数。

相关问题