Как говорит Джон, с CommandLine.arguments : unit -> string list
вы можете извлечь как первый, так и второй аргумент путем регулярного сопоставления шаблонов в этом списке. Предполагая, что два первых аргумента можно назвать foo и bar, и оба они должны интерпретироваться как строки и что любое другое количество аргументов (0, 1, 3, ...) является ошибкой, вы можете написать:
fun main() =
let val (foo, bar) = case CommandLine.arguments() of
[foo, bar] => (foo, bar)
| _ => raise Fail "Usage: tool <foo> <bar>"
in ...
end
и выполняя преобразования на foo
и bar
, такие как преобразование в количествах, не так уж трудно здесь. Но в случае, если аргументы командной строки являются необязательными или вы не хотите, чтобы их порядок имел значение, или вы хотите указать несколько способов их указания - например, -h
является псевдонимом для --human-readable
, в то время как оба работают - вы должны подумать об использовании библиотеки служебных программ в SML/NJ под названием GetOpt.
Он обеспечивает структуру для определения того, как аргументы командной строки должны интерпретироваться динамически. Вы можете прочитать SML/NJ GetOpt documentation, что дает небольшой пример. Это довольно общая библиотека и добавляет некоторую сложность, которая, возможно, не оправдана до тех пор, пока у вас не будет достаточно аргументов, и не стоит беспокоиться обо всех юридических комбинациях из них.
Я не знал об этой библиотеке «GetOpt» - спасибо, что вы указали это. –