gpt4 book ai didi

scala - 选择特征来继承 Scala 中的通用方法

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

假设我创建一个混合两个特征的类,这两个特征都实现一个通用方法,如下所示:

abstract class Base {
var x:Int
def adder:Int
}

trait One extends Base {
def adder() = {x+=2; x}
}

trait Two extends Base {
def adder() = {x+=3; x}
}

class WhichOne(var x:Int = 10) extends Base with One with Two

println((new WhichOne()).adder())

在运行时,Scala 当然会提示,因为它不知道应该选择哪个特征:

$ scala MixUpTraitImplems.scala 
MixUpTraitImplems.scala:18: error: class WhichOne inherits conflicting members:
method adder in trait One of type ()Int and
method adder in trait Two of type ()Int
(Note: this can be resolved by declaring an override in class WhichOne.)
class WhichOne(val x:Int = 10) extends Base with One with Two
^

当然,重写 adder() 意味着我要继续实现新版本的 adder,但如果我不想要这样怎么办?如果我想使用显式包含在特征 OneTwo 中的 adder 实现,该怎么办?

最佳答案

您可以将其指定为 super 的修饰符:覆盖 def adder() = super[One].adder()。另请注意,这是编译时错误,而不是运行时错误!

关于scala - 选择特征来继承 Scala 中的通用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33963593/

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