gpt4 book ai didi

scala - 隐式解析或类型推断的限制

转载 作者:行者123 更新时间:2023-12-04 05:14:17 25 4
gpt4 key购买 nike

我试图理解为什么以下 Scala 代码的隐式解析(或类型推断)失败。在此代码中,编译在倒数第二行失败,但在显式提供类型的行的修改版本上成功。

object O {
trait Wrapper[-A, +B] {
def func: A => B
}

object Identity

implicit class Identity2Wrapper[A](self: Identity.type) extends Wrapper[A, A] {
override def func: A => A = identity
}

// Compilation fails on the next line with error:
// found String("hello")
// required: A
Identity.func("hello")
// This line compiles.
implicitly[Identity.type => Wrapper[String, String]].apply(Identity).func("hello")
}

最佳答案

Travis Brown 似乎是对的,这是以下情况的发生:https://issues.scala-lang.org/browse/SI-6472

作为证明,我可以使用 Travis 自己在这里给出的解决方法来编译它:https://issues.scala-lang.org/browse/SI-6776

object O {
trait Wrapper[-A, +B] {
val funcFunc: A => B
def func( arg: A ): B = funcFunc( arg )
}

private class Private
trait BaseWrappable {
// Dummy method (cannot ever be called, just a work around to help the compiler)
def func( a: Private ) = ???
}

object Identity extends BaseWrappable

implicit class Identity2Wrapper[A](self: Identity.type) extends Wrapper[A, A] {
val funcFunc: A => A = identity
}

Identity.func("hello")
}

关于scala - 隐式解析或类型推断的限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14491303/

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