如何在Scala中检查输入变量是否为Int?

时间:2015-05-18 23:51:14

标签: scala

您好我正在阅读来自" 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)

无法弄清问题是什么!

4 个答案:

答案 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
}

编辑:修正了网址中的拼写错误