斯卡拉 – 为什么未来有副作用?
我正在阅读书籍
FPiS,在页面107上,作者说:
为什么Future还没有纯粹的功能界面? 解决方法
问题在于,由于Future的热切本质,创造一个引起副作用的未来本身也是副作用.
这打破了参考透明度.即如果你创建一个只打印到控制台的Future,将来会立即运行并运行副作用而不需要它. 一个例子: for { x <- Future { println("Foo") } y <- Future { println("Foo") } } yield () 这导致“Foo”被打印两次.现在,如果Future是引用透明的,我们应该能够在下面的非内联版本中获得相同的结果: val printFuture = Future { println("Foo") } for { x <- printFuture y <- printFuture } yield () 然而,这只是打印“Foo”一次,甚至更有问题,无论你是否包含for-expression,它都会打印出来. 使用引用透明表达式,我们应该能够在不改变程序语义的情况下内联任何表达式,Future不能保证这一点,因此它会破坏引用透明性并且本质上是有效的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |