相关疑难解决方法(0)

如何在Scala中写入文件?

对于阅读,有一个有用的抽象Source.如何在文本文件中写入行?

file-io scala scala-2.8

153
推荐指数
11
解决办法
14万
查看次数

"使用/尝试使用资源"的简单Scala模式(自动资源管理)

C#有usingIDisposable接口.Java的7+有相同的功能tryAutoCloseable接口.Scala允许您为此问题选择自己的实现.

scala-arm似乎是受欢迎的选择,并由Typesafe员工之一维护.但是,这种简单的行为似乎非常复杂.为了澄清,使用说明很简单,但了解所有代码在内部工作的方式相当复杂.

我刚刚编写了以下超级简单的ARM解决方案:

object SimpleARM {
  def apply[T, Q](c: T {def close(): Unit})(f: (T) => Q): Q = {
    try {
      f(c)
    } finally {
      c.close()
    }
  }
}
Run Code Online (Sandbox Code Playgroud)
  • 简单臂之类的东西有什么好处吗?似乎所有额外的复杂性应该带来额外的好处.
  • 通常,最好使用其他人支持的公共开源库,以获得使用自定义代码的通用行为.
  • 有人可以推荐任何改进吗?
  • 这种简单方法有任何限制吗?

scala resource-management

17
推荐指数
2
解决办法
1万
查看次数

我如何表达*最终*等同于Scala的尝试?

如何使用新TryAPI 将以下Java代码转换为Scala ?

public byte[] deflate(byte[] data) {

    ByteArrayOutputStream outputStream = null;
    GZIPOutputStream gzipOutputStream = null;

    try {
        outputStream = new ByteArrayOutputStream();
        gzipOutputStream = new GZIPOutputStream(outputStream);
        gzipOutputStream.write(data);
        return outputStream.toByteArray();
    catch (Exception e) {
        ...
    } finally {
        if (gzipOutputStream != null) gzipOutputStream.close();
    }
}
Run Code Online (Sandbox Code Playgroud)

Scala版本应该是这样的......

def deflate(data Array[Byte]): Try[Array[Byte]] = Try {
  ByteArrayOutputStream outputStream = new ByteArrayOutputStream()
  new GZIPOutputStream(outputStream).write(data)
  outputStream.toByteArray
}
Run Code Online (Sandbox Code Playgroud)

...但是如何实现Java的finally等效?

scala

4
推荐指数
2
解决办法
2152
查看次数

标签 统计

scala ×3

file-io ×1

resource-management ×1

scala-2.8 ×1