var name:String = _ -6ren">
gpt4 book ai didi

scala - 有没有像 "Unbounded Self Type"这样的东西?

转载 作者:行者123 更新时间:2023-12-01 09:24:32 27 4
gpt4 key购买 nike

我想定义一个 Renamable 特征,支持一些需要可变名称字段的类。这是我第一次尝试:

trait Renamable {
self =>
var name:String = _

def withName(name:String) = {
self.name = name
self
}
}

class Person extends Renamable {
def sayHello = println(s"Hello, i am $name")
}

我的问题是 withName() 返回类型被推断为 Renamable,不允许我像这样链接方法调用:

new Person().withName("Julio").sayHello 
//Error: value sayHello is not a member of Renamable

我读过我可以有一个 self 类型注释并将其用作返回类型,但我事先不知道将使用哪些类型。我希望返回与使用该特征的类相同,无限制。

我可以有“无限的 self 类型”吗?

最佳答案

您可以使用 this.type(可能 self.type 也可以)。此类型的唯一有效值是 this,因此允许调用站点知道返回的值是调用的接收者:

trait Renamable {
var name:String = _

def withName(name:String): this.type = {
this.name = name
this
}
}

关于scala - 有没有像 "Unbounded Self Type"这样的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27470698/

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