代码之家  ›  专栏  ›  技术社区  ›  Andremoniy

Java 8 lambda和alpha等价

  •  12
  • Andremoniy  · 技术社区  · 7 年前

    alpha-equivalence Java-8中的比较?

    Predicate<Integer> l1 = x -> x == 1;
    Predicate<Integer> l2 = y -> y == 1;
    
    1 回复  |  直到 7 年前
        1
  •  11
  •   Marco13    7 年前

    answer to a related question 从这个意义上讲,没有特定的、可靠的方法来获取lambda的“内容”。

    但是(现在是模糊的、手工的部分):

    然而 .

    Project Panama 有着模糊的目标,其中包括让开发人员更深入地访问lambda,帮助进一步(运行时)优化、翻译和处理。

    最近, Radosław Smogura posted in the mailing list

    我试图捕获lambda表达式,以便在运行时将其作为表达式树。我可以为简单的lambda(o)->(var==var)&&((varX==varX)&&(someField+1==1)),所以以后的用户可以使用(缺失的)API来检查树。

    Method m = BasicMatadataTest.class.getDeclaredMethod("lambda$meta0");
    Expression e = (Expression) m.invoke(null);
    BinaryExpression top = (BinaryExpression) e;
    BinaryExpression vars = (BinaryExpression) top.getLefthandExpression(); // represents (var == var)
    (VariableExpression) vars.getLefthandExpression() // represents first var, and it’s reference equal to vars.getRighthandExpression() as it’s same variable 
    

    ...

    参考值相等 至VAR。getRighthandExpression()作为其相同变量

    VariableExpression 无论实际变量如何,均为“相等” .

    非常 接近问题的实质)。