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,会帮你自动释放资源