Пожалуйста, дайте мне знать, если этот способ написания вопросов и ответов неуместен.Кроме того, я ожидаю и лучшего ответа.Оба предоставленных мною решения не идеальны.
В Интернете сейчас есть какой-то парсер аргументов Kotlin, например GitHub: xenomachina / kotlin-argparser , GitHub:Kotlin / kotlinx.cli или GitHub: ajalt / clikt .Однако я не хочу добавлять такую огромную папку в мой (возможно) маленький проект.То, что я хочу, - это простое и чистое решение, например, просто функция с «плавной» реализацией в стиле потока.Вместо этого все эти проекты содержат несколько файлов.
Я думаю только о том, что нужно просто преобразовать параметр командной строки в Map<String, List<String>>
, использовать map.containsKey()
, чтобы получить параметр no_argument
, и использовать map[key]
для получения required_argument
параметра.
Например, список параметров командной строки
-a -b c -d e f g -h --ignore --join k --link m n o -p "q r s"
будет проанализирован как:
{-a=[], -b=[c], -d=[e, f, g], -h=[], --ignore=[], --join=[k], --link=[m, n, o], -p=[q r s]}
или, скажем,
mapOf(
"-a" to listOf(), // POSIX style, no argument
"-b" to listOf("c"), // POSIX style, with single argument
"-d" to listOf("e", "f", "g"), // POSIX style, with multiple argument
"-h" to listOf(), // POSIX style, no argument
"--ignore" to listOf(), // GNU style, no argument
"--join" to listOf("k"), // GNU style, with single argument
"--link" to listOf("m", "n", "o"), // GNU style, with multiple argument
"-p" to listOf("q r s") // POSIX style, with single argument containing whitespaces
)