0

根据理解,模式匹配无法正常工作。

我阅读了教科书“Scala 编程”中的模式匹配概念。

我有一个模式匹配定义如下。

def checkMe (a:Any) =  a match {
      case Int => "I am an Integer"
      case Double => "I am a Double"
      case Char => "I am a Charecter"
      case _ => "I am something else"
     }

不管我在调用函数时传递了什么,总是执行默认情况。

例如:checkMa(100) 给出“我是别的东西” checkMe(10.) 也给出了“我是别的东西”等等。

有人可以帮我理解定义中有什么问题吗?

我希望根据我传递的类型执行定义。

4

2 回答 2

6

原因是您匹配的是伴随对象(Int、Double、Char)而不是实际类型,解决方案是匹配这样的类型:

def checkMe (a:Any) =  a match {
  case _: Int => "I am an Integer"
  case _: Double => "I am a Double"
  case _: Char => "I am a Charecter"
  case _ => "I am something else"
}

然后,您可以在 REPL 中进行测试以查看预期结果:

@ checkMe(4) 
res3: String = "I am an Integer"

@ checkMe(4.0) 
res4: String = "I am a Double"

@ checkMe('a') 
res5: String = "I am a Charecter"

@ checkMe("Asdas") 
res6: String = "I am something else"
于 2019-07-10T04:19:15.837 回答
4

你需要一个variable: Type模式匹配,

  def checkMe(a: Any) = a match {
    case a: Int => "I am an Integer"
    case a: Double => "I am a Double"
    case a: Char => "I am a Charecter"
    case _ => "I am something else"
  }

示例 - https://scastie.scala-lang.org/prayagupd/Pxzn4w8GQGCMIub33xMrRg/1

于 2019-07-10T04:19:26.977 回答