【问题标题】:Elixir - Mix run example with argumentsElixir - 混合运行示例和参数
【发布时间】:2020-01-05 20:47:33
【问题描述】:

Elixir 由 Erlang OTP 提供支持,它使用 Mix 作为构建工具来创建和运行应用程序。

我现在是初学者学习灵药

我可以通过指定 mix new sample 从命令行创建一个混合应用程序 我在里面写了一些代码来学习elixir和mix的基础知识。

exsex文件可以通过mix run sample.exs

命令运行

我正在尝试编写代码来获取特定类型的数字,例如特定范围(100000,20000)之间的素数

我想将这两个数字 (100000,200000) 作为 mix run sample.exs 100000,200000 之类的混合运行命令的参数,并在给定范围内得到结果。

注意 - 我不想使用 escript 构建和执行,只需要使用 mix run 命令,也不需要 mix run -e

如何获取 args 作为 exs 文件中的输入值?

非常感谢

【问题讨论】:

  • 旁注: mix与OTP无关,纯属elixir
  • 是的,没错……刚刚提到elixir使用mix作为构建工具
  • 请不要到处乱放parallel-processing标签。您提出的问题与并行处理无关。另外,你真的想要erlang 的答案吗?如果没有,也不要放这个标签。

标签: erlang elixir elixir-mix


【解决方案1】:

为了获取传递给程序的参数,您需要使用System.argv()。例如,给定以下 exs 脚本:

args = System.argv()  
       |> IO.inspect()

并运行elixir so_exs.exs input_1 input_2(注意我这里没有混合项目,所以我没有使用mix run)你会得到以下结果。 args 变量现在包含传递给程序的所有参数的列表:

["input_1", "input_2"]

【讨论】:

  • 谢谢 是否可以分别获取第一个和第二个参数,例如 start=input_1 和 end=input_2 ?
  • 是否可以在 for 循环中使用 args 作为范围变量?
【解决方案2】:

虽然System.argv/0 在一些琐碎的情况下有些工作,但我们通常使用OptionParser 进行或多或少复杂的选项处理。

["--start", "0", "--end", "42"]
|> OptionParser.parse(
  strict: [start: :integer, end: :integer]
)
|> IO.inspect()
#⇒ {[start: 0, end: 42], [], []}

要使用这些值:

{args, _, _} =
  OptionParser.parse(
    ["--start", "0", "--end", "42"],
    strict: [start: :integer, end: :integer]
  )
Enum.each(args[:start]..args[:end], &IO.inspect/1)

【讨论】:

  • 如何在 for 循环中得到一个范围数字,类似于 for ( i=start , i
  • 模式匹配结果并调用您选择的任何枚举。我已经用示例更新了答案。
  • 非常感谢,这与我要找的很接近
猜你喜欢
  • 2023-03-27
  • 2017-05-10
  • 2018-08-18
  • 2016-07-20
  • 2015-04-27
  • 1970-01-01
  • 2021-12-07
  • 2015-07-01
  • 2014-11-12
相关资源
最近更新 更多