我目前正在试图了解斯卡拉(2.10.2)迭代器和他们的行为。我有兴趣使用诸如filter
和map
这样的方法,这些方法根据互联网上的各个地方而被懒惰地实现,这很有帮助。斯卡拉迭代器抽象方法
但是,当我实现Iterator [T]接口时,调用filter
就会抛出一个java.lang.AbstractMethodError
。任何人都可以抛出一些为什么?
一个例子:
class SillyIterator extends Iterator[Int]
{
private var i = 0
def hasNext : Boolean = i < 10
def next() : Int =
{
val ret = i
i += 1
ret
}
}
,然后在控制台:
scala> new SillyIterator
res20: SillyIterator = [email protected]
scala> res20.filter(_ > 3)
java.lang.AbstractMethodError: SillyIterator.filter(Lscala/Function1;)Lscala/collection/Iterator;
...
编辑:
这不是由粘贴模式的问题引起的。如果我定义了整个班一行代码,它仍然失败:
scala> class SillyIterator extends Iterator[Int]{ private var i = 0; def hasNext : Boolean = i < 10; def next() : Int = { val ret = i; i += 1; ret } }
defined class SillyIterator
scala> val s = new SillyIterator
s: SillyIterator = [email protected]
scala> s.next
res0: Int = 0
scala> s.filter(_ < 3)
java.lang.AbstractMethodError: SillyIterator.filter(Lscala/Function1;)Lscala/collection/Iterator;
at .<init>(<console>:13)
...
您的代码在Scala 2.10.1上工作于REPL – ccheneson 2014-09-03 09:03:28
粘贴模式是解决方案,但获取REPL中的AbstractMethodError是一个错误。你是如何编写该课程的?你能显示完整的REPL会话吗? – gourlaysama 2014-09-03 09:50:40