2017-02-15 6 views
1

Я использую Elixir's OptionParser, но у меня возникают проблемы с разбором длинных пунктирных аргументов.Могу ли я разбирать длинные аргументы с помощью встроенного OptionParser от Elixir?

Предпочтительно, я хотел бы сделать что-то вроде этого:

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

Но это не похоже на работу. Я получаю Unknown option.

Кто-нибудь знает, если это возможно?

ответ

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

Это делает его немного более естественным, когда вы предоставляете аргументы чертежу как атомы вместо строк, вы можете просто сделать :db_username, вместо :"db-username".

Это поведение is documented, но его легко пропустить.

+1

Благодарим вас за разъяснение! – samvv