Elixir - 将 运行 示例与参数混合

Elixir - Mix run example with arguments

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

我现在正在以初学者的身份学习长生不老药

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

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

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

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

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

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

非常感谢

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

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

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

["input_1", "input_2"]

虽然 System.argv/0 somewhat works in trivial cases, we usually use 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)