【发布时间】:2011-02-08 18:26:17
【问题描述】:
各位 Scala 程序员大家好
我已经使用 Scala 工作了一个月,但是我在一些基本的东西上遇到了问题,我希望你能帮我解决这个问题。
case class PersonClass(name: String, age: Int)
object CaseTester {
def main(args:Array[String])
{
val string = "hej"
string match {
case e:String => println(string)
case PersonClass => println(string)
}
}
}
当我这样做时,我得到错误:
pattern type is incompatible with expected type;
found : object PersonClass
required: java.lang.String
case PersonClass => println(string)
如果我将模式匹配中的第二行更改为以下内容:
case e:PersonClass => println(string)
然后我得到错误:
error: scrutinee is incompatible with pattern type;
found : PersonClass
required: java.lang.String
case e:PersonClass => println(string)
但是,如果我将字符串定义更改为以下内容,它在两种情况下都可以正常编译。
val string:AnyRef = "hej"
【问题讨论】:
-
最初我在尝试制作案例类时遇到了这个问题,它也应该能够成为提取器,但是当我想到它并没有多大意义:)
-
你无法匹配这样的课程。
case PersonClass =>仅在PersonClass是一个对象时才有效。要匹配类,您可以分配给一个局部变量:case e: String =>,或者如果它是一个元组或案例类,则解包:(3, 4) match { case (a, b) =>
标签: scala types pattern-matching case-class