加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

斯卡拉 – 如何将这种三衬里写成一个班轮?

发布时间:2020-12-16 08:51:37 所属栏目:安全 来源:网络整理
导读:我喜欢这种方式,你可以在 Scala中编写单线方法,例如with List(1,2,3).foreach(..).map(..). 但是有一种情况,有时在编写Scala代码时会出现这种情况,事情变得有点难看.例: def foo(a: A): Int = { // do something with 'a' which results in an integer // e
我喜欢这种方式,你可以在 Scala中编写单线方法,例如with List(1,2,3).foreach(..).map(..).

但是有一种情况,有时在编写Scala代码时会出现这种情况,事情变得有点难看.例:

def foo(a: A): Int = {
  // do something with 'a' which results in an integer
  // e.g. 'val result = a.calculateImportantThings

  // clean up object 'a'
  // e.g. 'a.cleanUp'

  // Return the result of the previous calculation
  return result
}

在这种情况下,我们必须返回一个结果,但是在计算完成后不能直接返回它,因为我们必须在返回之前进行一些清理.

我总是要写一个三班轮.是否有可能编写一个单行代码来执行此操作(不更改A的??类,因为这可能是一个无法更改的外部库)?

解决方法

这里涉及明显的副作用(否则,调用calculateImportantThings和cleanUp的顺序无关紧要),因此建议您重新考虑您的设计.

但是,如果这不是一个选项,你可以试试像,

scala> class A { def cleanUp {} ; def calculateImportantThings = 23 }
defined class A

scala> val a = new A
a: A = A@927eadd

scala> (a.calculateImportantThings,a.cleanUp)._1
res2: Int = 23

元组值(a,b)等效于应用程序Tuple2(a,b),Scala规范保证其参数将从左到右进行求值,这就是你想要的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读