Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Elixir应用程序中运行单个函数?_Elixir - Fatal编程技术网

如何在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示例

幻灯片: