gpt4 book ai didi

scala - 使用单例类型理解 `apply` 和 `unapply`

转载 作者:行者123 更新时间:2023-12-04 08:03:26 25 4
gpt4 key购买 nike

鉴于:

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.tools.nsc.typechecker.Namers (编译器代码),apply以前由 completerOf 生成和 caseApplyMethodCompleter , 而 unapply曾经来自 completerOf .这个和可能的其他因素,可能是一些微妙的错误,导致 unapply丢失类型信息。 This change稍微重构代码并导致两种方法都通过新的 applyUnapplyMethodCompleter ,修复它。由于似乎没有关于这个问题的任何票证,真正的原因需要一些额外的挖掘。假设这不是预期的行为可能是安全的。

关于scala - 使用单例类型理解 `apply` 和 `unapply`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44781579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com