Я пишу несколько простых скриптов scala, которые заканчиваются тем, что начинаются с простого сопоставления с шаблоном на args
, например:
val Array(path, foo, whatever) = args
// .. rest of the script uses "path", "foo", etc.
Конечно, если я предоставлю неправильное количество аргументов, я получунепостижимая ошибка типа:
scala.MatchError: [Ljava.lang.String;@7786df0f
at Main$$anon$1.<init>(FollowUsers.scala:5)
...
Есть ли простой способ дать более полезное сообщение об ошибке?Мой текущий обходной путь заключается в том, чтобы сделать что-то вроде:
args match {
case Array(path, foo, whatever) => someFunction(path, foo, whatever)
case _ => System.err.println("usage: path foo whatever")
}
def someFunction(path: String, foo: String, whatever: String) = {
// .. rest of the script uses "path", "foo", etc.
}
Но это похоже на множество шаблонов, которые связаны с необходимостью определения целой другой функции и с повторением «пути», «foo» и «что угодно»"во многих местах.Есть ли способ лучше?Полагаю, я мог бы потерять функцию и поместить тело в оператор match, но мне это кажется менее читабельным.
Я знаю, что мог бы использовать один из множества пакетов для анализа аргументов командной строки, но я действительноищу что-то чрезвычайно легкое, для которого мне не нужно добавлять зависимость и изменять мой путь к классам.