相关疑难解决方法(0)

关于call-by-name和0-arity函数之间差异的一些问题

这里有一些讨论,但我有一些具体的问题,我无法找到答案.因此,通过按名称调用,我的意思是=>T类型,我的意思是0-arity函数() => T

我理解(我认为)概念上的差异,但可能我错过了一些东西,因为我仍然有很多问题:

  1. =>T如果我们总能使用,为什么我们有这个概念() => T呢?
  2. 每个都有任何语法/功能限制吗?现在我发现只能=>用作类字段.这是唯一的限制吗?
  3. 生成的代码是否始终相同?
  4. 我应该总是喜欢=>T吗?为什么?
  5. 调用=>T类型是否正确?它看起来像它在scala中没有任何类型表示.

scala

8
推荐指数
1
解决办法
436
查看次数

撰写尝试更好

我希望有一些实用程序可以使用和清理资源,安全和不安全,并在使用后清理资源,有点相当于try/finally,即使操作抛出异常也允许清理.

我有

def withResource[R, U](create: => R, cleanup: R => Unit)(op: R => U): U = {
  val r = create
  val res = op(r)
  cleanup(r)
  res
}

def tryWithResource[R, U](create: => R, cleanup: R => Unit)(op: R => U): Try[U] = {
  val tried: (R => Try[U]) = (r: R) => Try.apply(op(r))
  withResource(create, cleanup)(tried)
}
Run Code Online (Sandbox Code Playgroud)

但我不喜欢

val tried: (R => Try[U]) = (r: R) => Try.apply(op(r))
Run Code Online (Sandbox Code Playgroud)

看来我缺少一些明显的构图功能,但我看不到哪里.我试过了

val tried: (R => Try[U]) = (Try.apply _).compose(op)
Run Code Online (Sandbox Code Playgroud)

但是这样做没有成功

type mismatch;
[error] …
Run Code Online (Sandbox Code Playgroud)

scala composition

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

标签 统计

scala ×2

composition ×1