我目前正在試圖瞭解斯卡拉(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