Elixir - 混合运行示例与参数

Ska*_*osh 0 erlang elixir-mix elixir

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

我现在正在作为初学者学习长生不老药

我可以通过指定mix new sample从命令行创建 mix 应用程序, 并在其中编写一些代码来学习 elixir 和 mix 的基础知识。

可以使用命令mix run sample.exs运行exsex文件

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

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

注意 - 我不想使用 escript 构建和可执行文件,只需要使用 mix run 命令而不是mix run -e

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

非常感谢

Ale*_*mos 5

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

args = System.argv()  
       |> IO.inspect()
Run Code Online (Sandbox Code Playgroud)

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

["input_1", "input_2"]
Run Code Online (Sandbox Code Playgroud)


Ale*_*kin 5

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

["--start", "0", "--end", "42"]
|> OptionParser.parse(
  strict: [start: :integer, end: :integer]
)
|> IO.inspect()
#? {[start: 0, end: 42], [], []}
Run Code Online (Sandbox Code Playgroud)

要使用这些值:

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