我开始使用scala,我正在尝试将以下非功能代码转换为一个集合(一个只在请求时检索元素的惰性代码):
非功能代码是:
while (o.next) {
o.getItem // this will return the "next" element
}
我试过这个,但它不起作用:
val it = Iterator.continually(o.GetItem).takeWhile(_ => o.next)
在尝试使用该项之后,看起来o.next被称为,而不是之前。
有人能指出我正确的方向吗?如果我不能进行可迭代的集合,如何在不使用可变集合的情况下将其转换为序列?
非常感谢,
答案 0 :(得分:1)
看起来好像在尝试使用该项目之后调用了o.next,而不是之前。
是。考虑到GetItem
的结果调用谓词函数,GetItem
首先调用。
有人能指出我正确的方向吗?
由于你的对象似乎已经具有迭代器所需的两个方法的等价物,你可以通过调用这些方法为它创建一个迭代器:
val it = new Iterator[ElementType] {
def next() = o.getItem()
def hasNext = o.next
}