9

这是我在 Scala 上的第一个程序。所以,我希望我能获得愚蠢的免疫力。

该代码是对来自Programming in Scala.

我所做的就是

  1. 读取文本文件
  2. 迭代文件的行
  3. 打印文件中行的最大长度。

这样可行。

现在,当我尝试打印每一行以及行的长度

println (eachLine + ":" + eachLine.length)

它抛出一个错误。

我从 SO 中的这个链接了解到我应该在某处添加一个括号。但是在哪里以及为什么?

import scala.io.Source

class Loops {

}

object Loops{

  def main (args:Array[String]){
    printAllLines("Hello123.txt")
  }


  def printAllLines(fileName:String){

    var maxWidth=0
    var lineIterator=Source.fromFile(fileName).getLines;
    lineIterator.foreach((eachLine:String) =>
        println (eachLine + ":" + eachLine.length)
        maxWidth=maxWidth.max(eachLine.length) //Compilation ERROR at this line

    )
    Console.out.println (maxWidth)
  }

//这行得通!

def printAllLinesFor(fileName:String){

    var maxWidth=0

    for (eachLine<-Source.fromFile(fileName).getLines.toList){

        println (eachLine + ":" +eachLine.length)
        maxWidth=maxWidth.max(eachLine.length)

    }

    println (maxWidth)
 }

}

错误:value maxWidth 不是 Unit 的成员 //可能的原因:可能在 `value maxWidth' 之前缺少分号?

4

3 回答 3

10

改变

lineIterator.foreach((eachLine:String) =>
    println (eachLine + ":" + eachLine.length)
    maxWidth=maxWidth.max(eachLine.length) //Compilation ERROR at this line

)

lineIterator.foreach{ (eachLine:String) =>
    println (eachLine + ":" + eachLine.length)
    maxWidth=maxWidth.max(eachLine.length) //Compilation ERROR at this line

}

应该解决这个问题。

注意 和 之间的区别foreach {...}foreach (...)如果你的 foreach 块有多行,你应该使用{}.

于 2012-12-13T07:50:54.920 回答
6

多行函数的foreach需要大括号。

    lineIterator.foreach((eachLine:String) => {
        println (eachLine + ":" + eachLine.length)
        maxWidth=maxWidth.max(eachLine.length) //Compilation ERROR at this line
    })
于 2012-12-13T07:51:01.663 回答
1

当你添加 println 行时,你扩展了块;以前只有一条线,现在有两条线。因此,你必须在它周围加上花括号:

lineIterator.foreach((eachLine:String) => {
  println (eachLine + ":" + eachLine.length)
  maxWidth = maxWidth.max(eachLine.length) 
}
于 2012-12-13T07:57:49.270 回答