当Java8使用参照透明性时

阿布登诺·图米(Abdennour TOUMI)

我们注意到Java 8使用了参照透明性

我测试了许多代码来检测此RT,例如:

public class ReferentialTransparency {
       public static int triple(int number) {
           System.out.println(number);
           try {
            Thread.sleep(500);
           } catch (Exception e) {

           }
           return number* 3;
        }
        public static void main(String[] args) {
            List<Integer> vals=Arrays.asList(1,2,3,4,3);
            System.out.println(vals.parallelStream()
                    .mapToInt(ReferentialTransparency::triple)
                    .sum());
        }
}

安慰 :

3
4
2
1
3
39

我注意到Java 8运行三重方法,即使有一个元素出现了两次,也就是3

正如Istvan所解释的,我的问题是:

如果三重引用是透明的,为什么编译器不优化对三重(3)的重复调用?

钟莉莉

您的triple方法不是参照透明的,因为它既可以向控制台输出内容,也可以进入休眠状态。这些操作都不是参照透明的。实际上,很难(从您的代码中)检测编译器是否优化了对参照透明函数的调用,因为如果添加了一条print语句来检测它,那么根据定义,您的函数将不再是参照透明的。


请注意,在您提供给的链接中,给定的引用透明性的定义为

函数的一种属性,通过该表达式可以将表达式替换为其(求值的)值,而不会影响程序的含义。

您可以说这triple不是参照透明的,因为对eg的调用triple(2)不等同于6,因为仅仅求值6不会打印任何内容或休眠,而triple(2)也会在控制台上输出2并休眠一秒钟。由于替换triple(2)通过6将通过移除印刷和睡眠影响程序的意思,triple不是引用透明。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

纯度,参照透明性和状态单价

来自分类Dev

组件,隔离功能和“参照透明性”

来自分类Dev

例外情况和参照透明性

来自分类Dev

类型推断会干扰参照透明性

来自分类Dev

当图本身具有透明性时,如何使Gnuplot中的图的键不具有透明性?

来自分类Dev

使用图像透明性使黑色显示为“东西”

来自分类Dev

Skrollr背景透明性?

来自分类Dev

OpenGL透明性不透明

来自分类Dev

如何保证F#应用程序中的参照透明性?

来自分类Dev

使用透明性:透明视图后面的视图应仅发光而不重叠

来自分类Dev

如何在Windows 8桌面中禁用任务栏透明性?

来自分类Dev

OpenGL透明性无法正常工作

来自分类Dev

如何超越CSS的透明性方面

来自分类Dev

Gnome终端的背景透明性

来自分类Dev

CouchDB:连接到复制数据库时的透明性

来自分类Dev

从r67更改为r68时,Three.js透明性出错

来自分类Dev

拖动时,Windows变成具有完全内部透明性的黑白框架

来自分类Dev

绑定通用方法委托时出错-签名或安全透明性

来自分类Dev

过渡的不透明性在Java脚本中无法流畅运行

来自分类Dev

如何使用CSS淡化图像而没有不透明性?

来自分类Dev

在Ubuntu中使用命令更改gnome终端透明性?

来自分类Dev

如何在PHP中使用透明性最小化PNG图像并调整其大小

来自分类Dev

为什么Matlab的透明违反了透明性?

来自分类Dev

C#Win8:将.PNG复制到Windows剪贴板;粘贴并保留透明性

来自分类Dev

我对可变类的“引用透明性”的理解正确吗?

来自分类Dev

酒吧半透明性在iOS 7.0.3中消失了

来自分类Dev

来自FillRectangle的不希望有的透明性

来自分类Dev

证书透明性快速入门:如何监视域列表?

来自分类Dev

如何为KDE的终端配置背景透明性?

Related 相关文章

  1. 1

    纯度,参照透明性和状态单价

  2. 2

    组件,隔离功能和“参照透明性”

  3. 3

    例外情况和参照透明性

  4. 4

    类型推断会干扰参照透明性

  5. 5

    当图本身具有透明性时,如何使Gnuplot中的图的键不具有透明性?

  6. 6

    使用图像透明性使黑色显示为“东西”

  7. 7

    Skrollr背景透明性?

  8. 8

    OpenGL透明性不透明

  9. 9

    如何保证F#应用程序中的参照透明性?

  10. 10

    使用透明性:透明视图后面的视图应仅发光而不重叠

  11. 11

    如何在Windows 8桌面中禁用任务栏透明性?

  12. 12

    OpenGL透明性无法正常工作

  13. 13

    如何超越CSS的透明性方面

  14. 14

    Gnome终端的背景透明性

  15. 15

    CouchDB:连接到复制数据库时的透明性

  16. 16

    从r67更改为r68时,Three.js透明性出错

  17. 17

    拖动时,Windows变成具有完全内部透明性的黑白框架

  18. 18

    绑定通用方法委托时出错-签名或安全透明性

  19. 19

    过渡的不透明性在Java脚本中无法流畅运行

  20. 20

    如何使用CSS淡化图像而没有不透明性?

  21. 21

    在Ubuntu中使用命令更改gnome终端透明性?

  22. 22

    如何在PHP中使用透明性最小化PNG图像并调整其大小

  23. 23

    为什么Matlab的透明违反了透明性?

  24. 24

    C#Win8:将.PNG复制到Windows剪贴板;粘贴并保留透明性

  25. 25

    我对可变类的“引用透明性”的理解正确吗?

  26. 26

    酒吧半透明性在iOS 7.0.3中消失了

  27. 27

    来自FillRectangle的不希望有的透明性

  28. 28

    证书透明性快速入门:如何监视域列表?

  29. 29

    如何为KDE的终端配置背景透明性?

热门标签

归档