9

これは Scala での私の最初のプログラムです。だから、愚かさの免疫を獲得したいと思います。

このコードは、 のスニペットを 1 行変更したもの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)
 }

}

エラー: 値 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行を追加すると、ブロックが拡張されます。以前は1行しかありませんでしたが、現在は2行になっています。したがって、その周りに中括弧を配置する必要があります。

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