您好我正在阅读来自" args"的输入变量。我想检查输入是否为整数值。我跟着this link
var param=0
...
args(j) match {
...
case args(j): Int => param =args(j)
...
}
但它给了我一个错误:
[error] '=>' expected but ':' found.
[error] case args(j): Int => param =args(j)
无法弄清问题是什么!
答案 0 :(得分:6)
试试这个:
val intRegex = """(\d+)""".r
val param = args(j) match {
case intRegex(str) => str.toInt
case _ => 0 // or some other value, or an exception
}
您可能希望使用一些参数解析库。
或者,如果您想在一次通过中分配多个参数:
for (arg <- args) {
arg match {
case intRegex(arg) => param = arg.toInt
case p if Files.exists(Paths.get(p)) => path = Paths.get(p)
case _ => //
}
但这是一个相当丑陋的解决方案。我强烈建议你使用一些库,例如Scopt(https://github.com/scopt/scopt)。你可能需要花一些时间才能适应它,但它很好 - 你下次不会重新发明轮子:)
答案 1 :(得分:6)
val isInteger = Try(args(j).toInt).isSuccess
答案 2 :(得分:4)
使用scala.util.Try是另一种可行的方法。
{{1}}
答案 3 :(得分:1)
你还没有理解scala的模式匹配,我建议你再去查一下。 这是一篇很好的介绍https://www.tutorialspoint.com/scala/scala_pattern_matching.htm
param = args(j) match {
case i:Int => i
case _ => MyDefaultValueOrWhatever
}
编辑:修正了网址中的拼写错误