对于我必须制作的lister类,基本上只是一个带有一些额外方法的列表,我必须有一个交集方法。我认为我下面的工作有效,但在我标记问题行的部分我继续得到一个"值::不是类型参数S"的成员。错误。会导致什么?第二部分只是奖金,但如果有人能说出为什么我标记的问题第二行一直说对过度定义的模糊参考会很好。有两个构造函数,一个接受一个元素并启动列表,即public,以及一个私有主构造函数,它可以获取类型s的列表并生成一个列表。
def intersec(other:List[S]) = {
val a=this.toList
val b=other.toList
var holder = List()
var counter=b.length
if (b.length<a.length)cycles=a.length
for (i<-0 to cycles){
if (a.contains(b(i))){
holder=holder::b(i) // problem line
}
new Lister(holder) // problem line 2
}}
答案 0 :(得分:1)
b(i)
具有类型S,当然类型S没有前置函数。请注意::
是正确关联的。因此,holder :: b(i)
表示您使用参数::
调用b(i)
holder
函数。
因此您需要将该行更改为:holder = b(i) :: holder
顺便说一下,你的代码非常迫切,并且缺乏声明性。我想你想要一个具有与Scala标准库intersect
函数不同的行为的intersect
函数。在这种情况下,您可以使用隐式类来扩展List以具有新功能。