gpt4 book ai didi

scala - 声明的隐含和顺序

转载 作者:行者123 更新时间:2023-12-04 13:53:30 26 4
gpt4 key购买 nike

这是我遇到的事情的简化。编译如下:

trait A { implicit val x = 1 }
trait B extends A { val y = implicitly[Int] }

虽然没有(找不到隐式值):
trait B extends A { val y = implicitly[Int] }
trait A { implicit val x = 1 }

我试图通过指定一个自我类型来表明自己的意图: trait A { this: B => ... },但无济于事。

如何处理这种依赖关系而不必担心代码的布局?

最佳答案

您需要显式声明类型,至少对于后一种

trait B extends A { val y = implicitly[Int] }
trait A { implicit val x : Int = 1 }

无论隐式可见性的类型是否显式声明,其规则都不同。如果不是,则隐式仅在声明之后才可用(作为隐式)。

原因是如果不声明类型(如在递归例程中),类型推断可能会变得太困难。在很多情况下,推理会很容易(就像在您的代码中一样),但规范必须明确。

关于scala - 声明的隐含和顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9600588/

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