scala - scala 迭代器 hasNext 随机行为
问题描述
var intList = Iterator(range(1,10))
println("data"+intList)
println(intList.hasNext)
最后一行给出 True,而对于
var intList = Iterator(range(1,10))
println("data"+intList.toList)
println(intList.hasNext)
最后一行给出 False
为什么即使 intList 是不可变的,我也不会将它分配给任何新变量。
解决方案
没错,列表在 Scala 中是不可变的。但是,您intList
的不是列表;它是一个Iterator
,用于next()
迭代并且是可变的。
println("data " + intList)
这将打印出迭代器的表示。它可能会说“非空迭代器”之类的东西。它需要做的就是 call hasNext
,这不会改变任何事情。
println("data " + intList.toList)
toList
是一个方法(不要让括号的缺失欺骗了你;你在一个对象上调用的所有东西都是 Scala 中的一个方法),并且耗尽了迭代器,这意味着它会调用next()
直到没有任何剩余。然后你的迭代器是空的,所以hasNext
正确地告诉你没有下一个值。
推荐阅读
- python - 从 python 脚本中 SSH 并运行必须提供 sudo 密码的 sudo 命令
- r - 如何使用summarize_all为每个组获取与最大索引关联的非缺失值
- ruby-on-rails - 当foreign_key为字符串时遗留数据的rails关联
- c - 使用 free() 函数会导致运行时错误
- postgresql - postgres 返回 id 或选择 currval(pg_get_serial_sequence('','
'))? 我正在尝试使用 Dapper、Npgsql 从 .net 应用程序连接到 postgres 数据库。插入后,我想知道插入行的 id。我已阅读并尝试过此处讨论的
- vue.js - 如何使用模板语法访问 vuejs 中的父数据值
- r - 寻找一种方法来找到正交回归的微分方程
- python-3.x - 根据来自另一个数据帧的查找值创建一个 pandas 列
- ms-access - 访问 - 更新一系列其他字段之间的字段
- c# - XAML主窗口上的VideoDrawing?