如何通过对next()的连续调用创建可迭代集合,get_Next()

时间:2017-04-13 18:42:52

标签: scala

我开始使用scala,我正在尝试将以下非功能代码转换为一个集合(一个只在请求时检索元素的惰性代码):

非功能代码是:

while (o.next) {
    o.getItem // this will return the "next" element 
}

我试过这个,但它不起作用:

val it = Iterator.continually(o.GetItem).takeWhile(_ => o.next)

在尝试使用该项之后,看起来o.next被称为,而不是之前。

有人能指出我正确的方向吗?如果我不能进行可迭代的集合,如何在不使用可变集合的情况下将其转换为序列?

非常感谢,

1 个答案:

答案 0 :(得分:1)

  

看起来好像在尝试使用该项目之后调用了o.next,而不是之前。

是。考虑到GetItem的结果调用谓词函数,GetItem 首先调用

  

有人能指出我正确的方向吗?

由于你的对象似乎已经具有迭代器所需的两个方法的等价物,你可以通过调用这些方法为它创建一个迭代器:

val it = new Iterator[ElementType] {
    def next() = o.getItem()
    def hasNext = o.next
}