2016-01-28 29 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。好的是你可以傳遞可選的參數。

相關問題