Я пишу несколько простых скриптов 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.
}
Но это похоже на множество шаблонов what, с необходимостью определять целую другую функцию и повторять «path», «foo» и «что угодно» во многих местах. Есть ли способ лучше? Я предполагаю, что могу потерять функцию и поместить тело в оператор match, но мне это кажется менее читаемым.
Я знаю, что мог бы использовать один из многих пакетов синтаксического анализа аргументов командной строки, но я ' Я действительно ищу что-то чрезвычайно легкое, для чего мне не нужно добавлять зависимость и изменять путь к классам.