【问题标题】:Scala return value from match case来自匹配案例的Scala返回值
【发布时间】:2015-09-02 12:47:19
【问题描述】:

这是我的代码:

val regexMeter = """^\s*(\d+,*\d+)\s*[m]\s*$""".r
val regexCentimeter = """^\s*(\d+,*\d+)\s*cm\s*$""".r
val regexDecimeter = """^\s*(\d+,*\d+)\s*dm\s*$""".r
val regexMillimeter = """^\s*(\d+,*\d+)\s*mm\s*$""".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?

【问题讨论】:

  • 只要去掉赋值部分val newValue =,模式匹配的结果就是返回值(如果你的函数后面没有的话)。
  • 好的,我也会尝试该解决方案,谢谢!编辑:它不起作用!直到从输入行中取值...

标签: scala scope pattern-matching return-value


【解决方案1】:

在 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
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 2017-02-25
    • 2018-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多