gpt4 book ai didi

scala - 运行 reduceLeft 时类型不匹配

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

我有一个 ConfigRule 特征,它有 transform 方法作为

trait ConfigRule {
final def transform(doc: Node): Node = { .....}
}

然后我有 ConfigTransformer 看起来像有 transform 方法

trait ConfigTransformer {
def transform(doc: Node, rules: Seq[ConfigRule]) = {
rules.reduceLeft((x, y) => x.transform(doc).andThen(y.transform(_)))
}
}

我尝试将其运行为

object Runner extends App {
override def main(args: Array[String]): Unit = {
val n1 = NewNodeRule(<foo/>, <bar/>, Seq.empty, "adding bar under foo")
val n2 = NewNodeRule(<garage/>, <car/>, Seq.empty, "adding car under garage")

ConfigTransformer.transform(<Root/>, Seq(n1, n2))
}
}

编译错误为

Error:(18, 56) type mismatch;
found : PartialFunction[Int,scala.xml.Node]
required: solutions.xml.ConfigRule
rules.reduceLeft((x, y) => x.transform(doc).andThen(y.transform(_)))

我做错了什么?

最佳答案

我还不是 Scala 专家,但问题是你没有在 reduceLeft 语句中返回 ConfigRule 类型的对象(它是一个 Node,这就是你得到错误的原因)。我猜你要找的是 foldLeft。这是一个例子:

trait ConfigTransformer {
def transform(doc: Node, rules: Seq[ConfigRule]) = {
rules.foldLeft(doc)((d, x) => x.transform(d))
}
}

关于scala - 运行 reduceLeft 时类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42120274/

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