我可以使用Elixir的内置OptionParser解析长参数吗?

问题描述:

我正在使用Elixir的OptionParser,但我在解析长虚线参数时遇到问题。我可以使用Elixir的内置OptionParser解析长参数吗?

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

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

但这似乎并没有工作。我得到Unknown option

有人知道它是否有可能?

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"], [], []} 

这使得它更自然一点,当你提供的参数符合规范为原子而不是字符串,你可以做:db_username,而不是:"db-username"

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

+1

谢谢澄清! – samvv