gpt4 book ai didi

scripting - 模式匹配args,并在轻量级Scala脚本中给出错误消息

转载 作者:行者123 更新时间:2023-12-04 18:15:46 27 4
gpt4 key购买 nike

我编写了许多简单的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.
}

但这就像很多样板一样,必须定义一个完整的其他函数,并且必须在很多地方重复“path”,“foo”和“whatever”。有没有更好的办法?我想我可能会失去功能,并将主体放在match语句中,但对我来说似乎不太可读。

我知道我可以使用许多命令行参数解析包之一,但是我确实在寻找一种非常轻量级的东西,不需要添加依赖项并修改我的类路径。

最佳答案

怎么样?

val Array(path, foo, whatever) = if (args.length == 3) args 
else throw new Exception("usage:path foo whatever")

==编辑==

根据Randall的评论:
require(args.length == 3, "usage: path foo whatever")
val Array(path, foo, whatever) = args

那是最小的样板。您的val在范围内,您不必处理右花括号,并且会收到用法错误消息。

关于scripting - 模式匹配args,并在轻量级Scala脚本中给出错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3683858/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com