【问题标题】:Scala first program - errorScala第一个程序 - 错误
【发布时间】:2012-12-13 17:52:59
【问题描述】:

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

代码是来自Programming in Scala 的sn-p 的单行修改。

我所做的只是

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

这行得通。

现在,当我尝试

打印每一行以及该行的长度
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' 之前缺少分号?

【问题讨论】:

  • 谢谢@DominicBou-Samra :-)

标签: scala


【解决方案1】:

改变

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

【讨论】:

    【解决方案2】:

    foreach 需要大括号用于多行函数。

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-26
        • 2013-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多