【发布时间】:2017-03-26 00:42:21
【问题描述】:
在 Scala 中访问集合元素是通过apply 方法完成的。话虽如此,我尝试从标准输入中读取数字并在一行中将第二个数字作为 int 获取。
def main(args: Array[String]): Unit = {
val number = StdIn.readLine().split(" ").map(_.toInt)(1)
}
IntelliJ 标记此1 并显示错误(编译尝试后显示相同):
错误:(11, 60) 类型不匹配;找到:需要 Int(1): scala.collection.generic.CanBuildFrom[Array[String],Int,?] val number = StdIn.readLine().split(" ").map(_.toInt)(1)
折叠括号中的表达式也无济于事。但是,当我将映射输入拆分为 int 数组并将元素获取到其他行时,一切正常。
def main(args: Array[String]): Unit = {
val numbers = StdIn.readLine().split(" ").map(_.toInt)
numbers(1)
}
apply 的显式调用也可以完成这项工作:
val number = StdIn.readLine().split(" ").map(_.toInt).apply(1)
为什么会发生这种奇怪的行为?通过array(5) 获取元素只是array.apply(5) 的捷径吧?
【问题讨论】: