gpt4 book ai didi

scala - 在 Scala 中,如何在包含类之外为嵌套类型构建工厂?

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

举例说明:

class A {
def f = {
val b: B = C.factory(this).asInstanceOf[B]
}
class B
}

object C {
def factory(a: A): A#B = new a.B
}

C.factory 是一个用于创建 A#B 新实例的函数。由于 B 是嵌套类型,因此我在函数签名中包含了一个 A 引用。调用函数 f 必须转换从 factory 返回的引用,我想避免这种情况。没有 Actor 我得到:

error: type mismatch;
found : A#B
required: A.this.B

最佳答案

这取决于你想要什么。在 A 中,B 表示 this.B,即从封闭实例创建的 B。的确,您的工厂会返回,但并没有这样说。它只是说它返回 A#B(称为 类型投影),一些未指定的 AB实例。如果对于你的 val b,你不关心它是由哪个 A 实例创建的,那么你应该用 val b: A#B 这样说(或者让编译器推断它)。

如果您确实关心它是 A 中的 B 而不是其他,那么您可能就不走运了。您的 factory 返回由 a 参数创建的 B 实例。但是你的签名没有这么说。你会想要 a.B 而不是不太精确的类型投影 A#B。 las,语言不允许这样做。你会得到一个错误illegal dependent method type:当你写一个依赖类型a.B时,a must be a "stable identifier"and a method参数不被认为是一个。也许this blog post可能有帮助

关于scala - 在 Scala 中,如何在包含类之外为嵌套类型构建工厂?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7449686/

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