编程作业:面向对象的集合:def filterAcc(p:Tweet => Boolean,acc:TweetSet):TweetSet,打击我的思想

Spa*_*tan 0 oop scala

看来我处于死胡同!好吧这是一个我几乎已经完成的编程任务但是我已经在一个巨大的问题中停留了几天!

def filterAcc(p: Tweet => Boolean, acc: TweetSet): TweetSet = {

    if(p(elem))
        acc.incl(elem)

    if(!(left isEmpty))
        left filterAcc(p, acc)

    if(!(right isEmpty))
        right filterAcc(p, acc)

    acc
}
Run Code Online (Sandbox Code Playgroud)

经过多次println和调试后,似乎acc.incl(elem)似乎不起作用!我不知道为什么,但它没有添加元素.我称之为:

 def filter(p: Tweet => Boolean): TweetSet = filterAcc(p, new Empty)
Run Code Online (Sandbox Code Playgroud)

这也是来自Scala中的编程分配:面向对象的集合.任何帮助,将不胜感激.谢谢.

ste*_*ino 5

看起来你假设该incl方法改变了TweetSet.由于赋值来自Scala中的函数编程原理,我希望该TweetSet类型是不可变的,因此您必须改变当前的实现.

要在不可变数据结构上进行并行,请考虑字符串:如果reverse在字符串上调用该方法,则不会导致相同的实例反转,而是创建一个反转的新字符串.

scala> val s = "hello, world"
s: String = hello, world

scala> val r = s.reverse
r: String = dlrow ,olleh

scala> println(s, r)
(hello, world,dlrow ,olleh)
Run Code Online (Sandbox Code Playgroud)