我是 Scala 的新手,并尝试以实用的方式使用它。以下是我的问题:
为什么我不能使用“<-”运算符为具有函数返回值的“cnt”变量创建新绑定?
如何以函数方式增加不可变变量(类似于 Haskell <-)?为了实验,我不想使用可变变量。
import scala.io.Source object MyProgram { def main(args: Array[String]): Unit = { if (args.length > 0) { val lines = Source.fromFile(args(0)).getLines() val cnt = 0 for (line <- lines) { cnt <- readLines(line, cnt) } Console.err.println("cnt = "+cnt) } } def readLines(line: String, cnt:Int):Int = { println(line.length + " " + line) val newCnt = cnt + 1 return (newCnt) } }
至于副作用,我没想到 (line <-lines) 会如此具有破坏性!它完全展开线迭代器。因此,运行以下代码段将使 size = 0 :
val lines = Source.fromFile(args(0)).getLines()
var cnt = 0
for (line <- lines) {
cnt = readLines(line, cnt)
}
val size = lines.size
像这样隐藏的副作用是正常的 Scala 实践吗?