这是我在Scala上的第一个程序。所以,我希望我能获得愚蠢的免疫力。
代码是来自Programming in Scala
的代码段的一行修改。
我所做的只是
有效。
现在,当我尝试打印每行以及行的长度时
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'之前可能缺少分号?
答案 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)
}