首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用单例类型理解‘`apply`’和‘`unapply`’

用单例类型理解‘`apply`’和‘`unapply`’
EN

Stack Overflow用户
提问于 2017-06-27 13:29:18
回答 1查看 251关注 0票数 8

给予:

代码语言:javascript
复制
import shapeless._
import syntax.singleton._

case class Foo(a: String, one: Witness.`1`.T)

为什么Foo.apply _Foo.unapply _有不同的签名,即Int(1)Int分别?

代码语言:javascript
复制
scala> Foo.apply _
res5: (String, Int(1)) => Foo = <function2>

scala> Foo.unapply _
res6: Foo => Option[(String, Int)] = <function1>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-30 14:56:50

据我所知,在scala.tools.nsc.typechecker.Namers (编译器代码)中,apply过去是由completerOfcaseApplyMethodCompleter生成的,而unapply过去只来自completerOf。这可能是其他一些因素,可能是一些微妙的错误,导致unapply丢失类型信息。这一变化稍微修改了代码,并导致两个方法都通过新的applyUnapplyMethodCompleter来修复它。由于在这个问题上似乎没有任何门票,真正的原因将需要一些额外的挖掘。这可能是安全的假设,这不是有意的行为。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44781579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档