gpt4 book ai didi

scala - 如何将隐式类参数映射到特征变量?

转载 作者:行者123 更新时间:2023-12-01 11:37:00 25 4
gpt4 key购买 nike

我遇到了隐式参数和特性的有趣问题。

我有一个抽象类 Parent 隐含地接受一个整数和 2 个其他参数:

abstract class Parent(a: Int)(implicit str: String, map: Map[String,String]) {/*...*/}

和将与 Parent 混合并使用隐式的特征 ClassTrait:

trait ClassTrait {
val str: String
val map: Map[String,String]

def doSth() = str.length
}

所以现在我想做这样的事情(没有关键字abstract):

class Child(a: Int)(implicit str: String, map: Map[String,String]) extends Parent(a) with ClassTrait {
def doSth2 = doSth * 10
}

我应该使用什么语法来将隐式参数映射到特征值?编译器返回此错误:

foo.scala:10: error: class Child needs to be abstract, since:
value map in trait ClassTrait of type Map[String,String] is not defined
value str in trait ClassTrait of type String is not defined
class Child(a: Int)(implicit str: String, map: Map[String,String]) extends Parent(a) with ClassTrait {
^
one error found

在复杂的例子中,我在特征中使用了隐式参数,但由于特征不能有任何参数(没有构造函数),我需要再次声明使用隐式。

感谢您的帮助。

最佳答案

尝试

class Child(a: Int)(implicit val str: String, map: Map[String,String]) extends Parent(a) with ClassTrait {
def doSth2 = doSth * 10
}

(见我添加的val)

或者使用案例类。然后它们将是字段。

替代方法可能是不使它们隐式化,并在采用隐式设置它们的伴随对象中使用 apply 方法。但是您仍然需要将它们设为字段,您当前的代码在技术上只是将它们视为构造函数参数。

关于scala - 如何将隐式类参数映射到特征变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25822539/

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