如何在Elixir应用程序中运行单个函数?
我需要为我的项目创建一个等价的如何在Elixir应用程序中运行单个函数?,elixir,Elixir,我需要为我的项目创建一个等价的main函数。我需要添加一些依赖项到项目中,并使用它们来运行单个函数。我真的不需要OTP应用程序,所以我认为这样定义它(有主管和所有东西)太过分了 我做了一个测试,把它放在mix.ex中,就像这样,它工作了 def application do MyModule.main [applications: [:logger]] end 但感觉不自然。有没有更标准的方法 编辑: 将其放入应用程序中仅在它出于某种原因第一次编译时才起作用。在您的mix中添加mod
main
函数。我需要添加一些依赖项到项目中,并使用它们来运行单个函数。我真的不需要OTP应用程序,所以我认为这样定义它(有主管和所有东西)太过分了
我做了一个测试,把它放在mix.ex
中,就像这样,它工作了
def application do
MyModule.main
[applications: [:logger]]
end
但感觉不自然。有没有更标准的方法
编辑:
将其放入
应用程序中
仅在它出于某种原因第一次编译时才起作用。在您的mix中添加mod
选项。exs应用程序
功能:
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
我将使用
start
函数,而不是您在示例中指定的main
函数,因为这是公认的做法。但是,如果必须使用main
函数,我相信有一种方法可以覆盖它。只需查看应用程序
behavior的文档。我喜欢Jason的回答,但在他回答之前,我漫不经心地问了他,得出了以下答案:
只需在项目的任意位置创建一个嵌套在Mix.Tasks
defmodule Mix.Tasks.MyTask do
def run(args) do
#Do some stuff once
end
end
然后像下面这样从命令行外部运行它。很好的一点是,您可以传递可选的参数。您还可以使用escript功能,尽管这也可以构建一个运行“main”的独立脚本。看 下面是一个简单的hello world示例 幻灯片: