【发布时间】:2017-06-30 22:56:50
【问题描述】:
给定:
import shapeless._
import syntax.singleton._
case class Foo(a: String, one: Witness.`1`.T)
为什么Foo.apply _和Foo.unapply _有不同的签名,分别是Int(1)和Int?
scala> Foo.apply _
res5: (String, Int(1)) => Foo = <function2>
scala> Foo.unapply _
res6: Foo => Option[(String, Int)] = <function1>
【问题讨论】:
-
对于什么是有价值的,在 scala 2.12.2 中我得到了
(String, 1) => Foo和Foo => Option[(String, 1)],这可能是你所期望的。在 scala 2.11.11 中我得到(String, 1) => Foo和Foo => Option[(String, Int)],最后在 scala 2.10.6 中我得到(String, Int(1))和Foo => Option[(String, Int)](就像你一样)。 -
这似乎无关紧要,因为在 2.10.6 中这仍然有效:
val a: Witness.`2`.T = Foo("a",1) match { case Foo(_,one) => one + 1; case _ => 2 }