为什么我必须以unapply方法返回some

Man*_*dha 3 scala

如果我不使用Somein unapply方法,为什么以下代码不起作用?

scala> object T {
     | def unapply(i:Int) = (i+1,i+2) //Some not used, I get error
     | }
defined object T

scala> 1 match {
     | case T(x,y) => println(x,y)
     | }
<console>:14: error: an unapply result must have a member `def isEmpty: Boolean
       case T(x,y) => println(x,y)
            ^

scala> object T {
     | def unapply(i:Int) = Some(i+1,i+2) //Some used. No error
     | }
defined object T

scala> 1 match {
     | case T(x,y) => println(x,y)
     | }
(2,3)
Run Code Online (Sandbox Code Playgroud)

斯卡拉>

jwv*_*wvh 8

你没有.你必须返回一个有isEmpty()方法和get()方法的东西.Option提供两者,这是一个方便的解决方案.

这就是编译器知道匹配成功的方式.如果isEmpty()返回true则匹配失败并尝试下一个匹配(如果有下一个匹配).