如何从Scala def返回值
我是Scala的新手,但对Haskell有一些经验。我做了以下工作:如何从Scala def返回值,scala,Scala,我是Scala的新手,但对Haskell有一些经验。我做了以下工作: import scala.io.Source val fileContent = Source.fromFile(filename).getLines.toList val content = fileContent.map(processLine) def processLine(line: String){ val words = line.split("\\s+") println((words(0)
import scala.io.Source
val fileContent = Source.fromFile(filename).getLines.toList
val content = fileContent.map(processLine)
def processLine(line: String){
val words = line.split("\\s+")
println((words(0), words(1)))
}
这里processLine不返回任何内容,因此内容现在是所有项的空返回值列表。我认为解决方案是在processLine中包含一个返回值,但Scala不喜欢这样:
warning: enclosing method processLine has result type Unit: return value discarded
那么,我如何修改processLine,以便它可以用来创建内容中非空元组值的列表呢?如何声明一个包含多行的lambda函数
多亏了这篇文章中的有用信息,我还可以用lambda表达式编写它:
var nonLinearTrainingContent = fileContent.map(x=> {
val words = x.split("\\s+")
(words(0), words(2))
})
使元组(单词(0)、单词(1))成为processLine函数的最后一行:
def processLine(line: String) = {
val words = line.split("\\s+")
println((words(0), words(1)))
(words(0), words(1))
}
val processLineFun : String => (String, String) = line => {
val words = line.split("\\s+")
val result = (words(0), words(1))
println(result)
result
}
编辑:对多行lambda函数或带“;”的单独运算符使用大括号对于一行lambda
Edit2:固定返回类型有两种情况会阻止返回结果:
println
返回Unit
Unit
def processLine(line: String) : (String,String) = {
val words = line.split("\\s+")
val result = (words(0), words(1))
println(result)
result
}
正如所问的一样,将其表示为一个函数:
def processLine(line: String) = {
val words = line.split("\\s+")
println((words(0), words(1)))
(words(0), words(1))
}
val processLineFun : String => (String, String) = line => {
val words = line.split("\\s+")
val result = (words(0), words(1))
println(result)
result
}
这仍然会返回
Unit
在用大括号括起来的方法体之前应该有“=”,请参见我的编辑。您是否也可以用lambda函数替换processLine?我认为这将完成/补充线程答案。。