Scala从匹配情况返回值



下面是我的代码:

val regexMeter = """^s*(d+,*d+)s*[m]s*$""".r
val regexCentimeter = """^s*(d+,*d+)s*cms*$""".r
val regexDecimeter = """^s*(d+,*d+)s*dms*$""".r
val regexMillimeter = """^s*(d+,*d+)s*mms*$""".r
val height = scala.io.StdIn.readLine("Please insert the height of your shape:")
height match {
  case regexMeter(value) => val newValue = value.toDouble*100
  case regexCentimeter(value) => val newValue = value.toDouble
  case regexDecimeter(value) => val newValue = value.toDouble*10
  case regexMillimeter(value) => val newValue = value.toDouble/10
  case _ => throw new IllegalArgumentException
}

所以事情是我的输入是例如:"21m",它只抓取21,如果它的正则表达式与米匹配它分配给val newValue和做一些东西与它。但是当我现在想打印这个值newValue时它说它找不到这个值?如何在匹配情况之外返回这个val ?

在Scala中,几乎所有东西都是表达式并返回值,包括模式匹配:

val newValue = height match {
    case regexMeter(value) => value.toDouble*100
    case regexCentimeter(value) => value.toDouble
    case regexDecimeter(value) => value.toDouble*10
    case regexMillimeter(value) => value.toDouble/10
    case _ => throw new IllegalArgumentException
}

相关内容