ich eine Reihe von einfachen scala-Skripte schreiben, die mit einer einfachen Muster begonnenes Match am Ende auf args
wie:Muster Spiel args und gibt Fehlermeldungen in einem leichten Scala Skript
val Array(path, foo, whatever) = args
// .. rest of the script uses "path", "foo", etc.
Natürlich, wenn ich die Versorgung falsche Anzahl an Argumenten, erhalte ich einen unergründlich Fehler wie:
scala.MatchError: [Ljava.lang.String;@7786df0f
at Main$$anon$1.<init>(FollowUsers.scala:5)
...
gibt es eine einfache Möglichkeit, eine nützlichere Fehlermeldung zu geben? Meine aktuelle Problemumgehung ist wie etwas zu tun:
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.
}
Aber das fühlt sich an wie viele vorformulierten, was mit einer ganz anderen Funktion definieren zu müssen, und mit wiederholen „Pfad“, „foo“ und „was auch immer“ in so viele Orte. Gibt es einen besseren Weg? Ich schätze, ich könnte die Funktion verlieren und den Körper in die Übereinstimmungserklärung einfügen, aber das scheint mir weniger lesbar.
Ich weiß, ich könnte eines der vielen Befehlszeilenargumente verwenden, die Pakete analysieren, aber ich bin wirklich auf der Suche nach etwas extrem Leichtem, dass ich keine Abhängigkeit hinzufügen und meinen Klassenpfad für ändern muss.
Ja, ich denke, das ist in Ordnung, obwohl Sie eine Stack-Trace anstelle einer einfachen Fehlermeldung erhalten. – Steve
Dafür ist 'require' gedacht. Z.B. 'require (args.length == 3," Argumente müssen Länge drei im Aufruf von XYZ haben ")' –
Die Version mit "require" ist nett und einfach. Sie erhalten jedoch eine ziemlich ausführliche Ausnahme: 'java.lang.IllegalArgumentException: Anforderung fehlgeschlagen: Verwendung: Pfad foo was auch immer (und dann alle üblichen Tracebacks). Macht Sinn für einen Scala-Entwickler, könnte aber etwas verwirrend sein für jemanden, der Scala nicht kennt, aber nur mein Skript verwenden möchte. – Steve