gpt4 book ai didi

scala - 在两个相等的抽象类型上定义的 Scala 方法

转载 作者:行者123 更新时间:2023-12-02 07:42:21 25 4
gpt4 key购买 nike

我想知道我应该如何编写一个像 Example.baz 这样的方法:

class Foo {
type T
def send : T
}

class Bar {
type U
def receive(u: U)
}

class Example {
def baz(f: Foo, b: Bar) {
b.receive(f.send)
}
}

显然,这仅在 T = U 的情况下才有意义,而这正是我的意图。我只是不确定如何将该意图告知编译器。我觉得我对某些非常明显的语言特征一无所知。

最佳答案

一个解决方案是使用泛型而不是内部类型:

trait Foo[T] {
def send : T
}

trait Bar[T] {
def receive(t: T)
}

class Example {
def baz[T](f: Foo[T], b: Bar[T]) {
b.receive(f.send)
}
}

或者使用内部类型,正如 Debilski 在评论中所解释的那样:

class Example {
def baz[A](f: Foo {type T = A}, b: Bar {type T = A}) {
b.receive(f.send)
}
}

如果您因为更喜欢使用内部类型而感到难过,请耐心等待,Martin Odersky(和 scala 团队)正在努力:http://groups.google.com/group/scala-language/browse_thread/thread/3d5e2ae8ed6a221f/ff2536f0f0296ec8?#ff2536f0f0296ec8

关于scala - 在两个相等的抽象类型上定义的 Scala 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9800921/

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