我可以用Elixir的内置OptionParser解析长篇论据吗?

时间:2017-02-15 14:04:03

标签: arguments elixir

我正在使用Elixir的OptionParser,但我在解析长的虚线参数时遇到了问题。

最好,我想做这样的事情:

OptionParser.parse(argv, strict: ["db-username": :string, "db-password": :string])

但这似乎不起作用。我得到Unknown option

有人知道某种可能吗?

1 个答案:

答案 0 :(得分:5)

OptionParser有这种(有点奇怪的)行为,它将你的选项名称从使用下划线更改为使用破折号,并且不允许你自己用破折号指定参数。

iex(1)> argv = ["--db-username", "foo"]
["--db-username", "foo"]
iex(2)> OptionParser.parse(argv, strict: ["db-username": :string, "db-password": :string])
{[], ["foo"], [{"--db-username", nil}]}
iex(3)> OptionParser.parse(argv, strict: ["db_username": :string, "db_password": :string])
{[db_username: "foo"], [], []}

当你将参数spec作为原子而不是字符串提供时,这会更自然一点,你可以:db_username而不是:"db-username"

此行为is documented,但很容易错过。