аргументы сопоставления с образцом и сообщения об ошибках в облегченном сценарии Scala

Я пишу несколько простых скриптов 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, но мне это кажется менее читаемым.

Я знаю, что мог бы использовать один из многих пакетов синтаксического анализа аргументов командной строки, но я ' Я действительно ищу что-то чрезвычайно легкое, для чего мне не нужно добавлять зависимость и изменять путь к классам.

5
задан Steve 10 September 2010 в 10:25
поделиться