gpt4 book ai didi

scala - 案例类构造函数似乎是虚假的 "does not take arguments"错误

转载 作者:行者123 更新时间:2023-12-04 15:14:19 26 4
gpt4 key购买 nike

我有一个 case 类,它的构造函数有几个参数,我定义了一个随附的类对象,该对象定义了一个采用不同参数集的替代构造函数,如下所示:

case class MyClass (c: Char, mc: List[MyClass]) 

object MyClass {
def apply(c: Char, mc: MyClass): MyClass = {
MyClass(c, List(mc))
}
}

我想在 foldRight 中使用原始 case 类构造函数:
object SomeStuff {
def problem (s: String) {
assert(!s.isEmpty)

val zero = MyClass('a', Nil)

val mc2 = "Pillsy Pillsy Pillsy" foldRight(zero) {
MyClass(_, List(_))
}
}
}

当我这样做时,我从编译器收到一条错误消息:“MyClass 不接受参数。”如果我注释掉 val mc2 = ... 部分这个问题消失了,但是 MyClass显然在 zero 的定义中采用参数.我觉得我一定错过了一些非常基本的东西,但我不知道它是什么。我尝试了几种解决方法,例如定义一个辅助方法或函数值以用作 foldRight 的第二个参数。 ,但这都没有帮助,这并不奇怪,因为我基本上是在随机摸索。

最佳答案

一、foldRight需要两个参数,因此您不能使用运算符表示法(以其当前形式),但您可以:

("foo" foldRight zero) { ... }

或者,
("foo" :\ zero) { ... }

二、 { MyClass(_, List(_)) }将脱糖成
{ x => MyClass(x, y => List(y)) }

所以,你应该命名参数并使用 new关键字以确保调用构造函数而不是 apply方法:
"Pillsy Pillsy Pillsy".foldRight(zero) { (c, mc) =>
new MyClass(c, List(mc))
}

或使用补充 apply如果要使用下划线的方法:
"Pillsy Pillsy Pillsy".foldRight(zero) { MyClass(_, _) }

关于scala - 案例类构造函数似乎是虚假的 "does not take arguments"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10566253/

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