模式匹配没有按照理解工作。
我阅读了教科书"Programming in 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.(也给出了"我是别的东西"等。
有人可以帮我了解定义中的问题吗?
我希望定义根据我传递的类型执行。
原因是您要匹配配套对象(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"
你需要一个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