gpt4 book ai didi

scala - 扩展特征和类型

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

我想有一个密封的特征,它具有一个声明的方法,该方法返回
扩展特性的实际类。我应该使用抽象类型,参数类型还是
还有其他解决此问题的好方法吗?

sealed trait Foo {
type T
def doit(other: T): T
}

或者
sealed trait Foo[T] {
def doit(other: T): T
}

请注意,在此示例中, T必须是 Foo的子类型。如果我这样做的话
信息感觉太重复了:
case class Bar(name: String) extends Foo[Bar] {
def doit(other: Bar): Bar = ...
}

最佳答案

您可以通过让doit方法返回工厂函数来减少重复次数:

trait Foo[T] { 
self: T =>
def doit: T => T
}

case class Bar(name: String) extends Foo[Bar] {
// note: types omitted
def doit = { other => Bar(name + other.name) }
}

用抽象类型不可能做同样的事情:
trait Foo { 
self: T => // won't compile because T isn't defined yet
type T
def doit: T => T
}

关于scala - 扩展特征和类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4303097/

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