斯卡拉 – 如何将这种三衬里写成一个班轮?
发布时间: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规范保证其参数将从左到右进行求值,这就是你想要的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |