模式匹配未提供预期的结果

时间:2019-07-10 04:12:49

标签: scala pattern-matching

根据理解,模式匹配不起作用。

我在教科书“ 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。)也会给出“我是别的东西”等。

有人可以帮助我理解定义中的错误吗。

我希望定义根据我通过的类型执行。

2 个答案:

答案 0 :(得分: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"

答案 1 :(得分:4)

您需要Day(EOMONTH(date_you_needed))来进行模式匹配,

variable: Type

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