【发布时间】:2019-06-29 01:11:37
【问题描述】:
这是Why can't I run such scala code? (reduceRight List class method)的续集
我正在按照那里接受的答案重命名我的抽象类并添加 list: List[T] 作为方法 foldRight 的参数。
abstract class ListT {
def foldRight[U](z : U)(list: List[T], op: (T, U) => U): U = list match {
case Nil => z
case x :: xs => op(x, foldRight(z)(xs, op))
}
}
但我仍然收到“def”行的错误
此行有多个标记,未找到:键入 T
【问题讨论】:
-
也许你想要
List[T]? -
@LuisMiguelMejíaSuárez 抽象类 List[T]?不~这正是我引用的reduceRight方法线程的答案。
-
那你需要在某处定义类型参数
T。无论如何,让该方法接收另一个 List 有点奇怪。特别是因为那是标准库中的列表......你到底想做什么?使用 foldRight 方法定义您自己的 List 类?还是你自己的 foldRight 函数? -
"。我不在乎它是在 stdlib List[T] 上运行还是在自定义抽象类上运行。"如果您希望模式匹配起作用,您将需要知道您操作的列表类型。
Nil和::来自标准库。 -
从头开始:是的。但更多的是通过定义
MyList[T]、MyNil、myConcat。您并不真正关心T是什么(假设您的列表可以使用任何类型的元素)。
标签: scala