假设我有一个函数
writeToFileOrStdout(fname: String = Nil) = { ... }
如果用户为 fname 传递一个字符串值,那么我想打开一个具有该名称的文件并写入它;否则,我想打印到标准输出。我总是可以只编写一个 if 语句来处理这个问题,但是我如何在 fname 上编写一个 case 语句并打开正确的相应输出流?
val outStream = fname match {
case Nil => ???
case _ => new java.io.FileOutputStream(new java.io.File(fname))
}
outStream.write( ... )
谢谢!
最佳答案
为什么不将函数重写为:
def writeToFileOrStdout(fname: Option[String] = None) = {
val outStream = fname match{
case Some(name) => new java.io.FileOutputStream(new java.io.File(name))
case None => System.out
}
...
}
使用 Option
作为可选输入始终是一个好主意,而不是使用 null
。这基本上就是它的用途。在好的 scala 代码中,您不会看到对 null
的显式引用。
事实上,你的代码甚至无法为我编译。 Nil
用于表示空列表,而不是 null 或未提供的 String
。
关于java - Scala 打开写入标准输出或文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17576253/