下面是我的代码:
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
}