Scala第一个程序 - 错误

时间:2012-12-13 07:45:20

标签: scala

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

代码是来自Programming in Scala的代码段的一行修改。

我所做的只是

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

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

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

    它会抛出错误。

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

    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)
     }
    

    }

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

3 个答案:

答案 0 :(得分:9)

更改

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区块有多行,则应使用{}

答案 1 :(得分:6)

foreach需要多线功能的大括号。

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

答案 2 :(得分:1)

添加println行时,可以扩展块;它之前只有一行,但现在它有两行。因此,你必须在它周围放置花括号:

lineIterator.foreach((eachLine:String) => {
  println (eachLine + ":" + eachLine.length)
  maxWidth = maxWidth.max(eachLine.length) 
}