首页 > 如何在获得返回值之后还需要进行其他操作的函数中不使用类似return的返回方式?

如何在获得返回值之后还需要进行其他操作的函数中不使用类似return的返回方式?

def read(url: URL, charsetName: String) = {
  val reader = new BufferedReader(new InputStreamReader(url.openStream(), Charset.forName(charsetName)))
  val str = reader.lines.reduce("", (x: String, y: String) => x + "\n" + y)
  reader.close()
  str
}

如何让这个函数不使用这样的方法返回值?这种方法很难看,不符合scala的风格
有什么办法能把这个函数改成单个表达式的形式吗

注: reduce("", (x: String, y: String) => x + "\n" + y)这里用了一个隐式转换,把(T, T) => T转换为BinaryOperation[T]


这样满足需求否:

  def read(url: URL, charsetName: String) = {
    val reader = new BufferedReader(new InputStreamReader(url.openStream(), Charset.forName(charsetName)))
    try {
      reader.lines.reduce("", (x: String, y: String) => x + "\n" + y)
    } finally {
      reader.close()
    }
  }

或者可以考虑试试这个项目:scala-arm,会帮你自动释放资源

【热门文章】
【热门文章】