JFX学习笔记 七 增量式求值和懒惰求值

/*
* Main.fx
*
* Created on 2008-11-24, 9:04:46
*/

package javafxapplication3;
/**
* @author notpeeging
*/
// place your code here
import java.lang.System;

class X {
attribute a: Number;
attribute b: Number;
attribute c: Number;
}
//
// trigger on X.b = newValue {
// System.out.println("X.b is now {newValue}");
// }
//
// trigger on X.c = newValue {
// System.out.println("X.c is now {newValue}");
// }

var x1 = X {
a: 1
b: 2 // X.b is now 2 is printed
c: 3 // X.c is now 3 is printed
};

var x2 = X {
a: x1.a // eager, non-incremental
b: bind x1.b // eager, incremental (X.b is now 2 is printed)
// c: bind lazy x1.c // lazy, incremental (nothing is printed yet)
};

System.out.println(x2.a); // prints 1
System.out.println(x2.b); // prints 2
System.out.println(x2.c); // prints X.c is now 3, then prints 3

x1.a = 5;
x1.b = 5; // prints X.b is now 5, twice
x1.c = 5; // prints X.c is now 5, twice

System.out.println(x2.a); // prints 1
System.out.println(x2.b); // prints 5
System.out.println(x2.c); // prints 5
注释的地方本可以通过,但不知道为什么会报错。。。无语

例中,x2的属性b和c被绑定到x1的属性b和c。这意味着当x1的b或c属性被更新时,x2的b或c属性都会相应地被更新。在x2中的b、c属性之间的不同是:前者的属性值在其属性初始化程序中被立即更新,而后者的绑定直到其值被访问时才被求值。

注意:函数体无需bind操作符便可被增量地求值,但操作体则做不到。在改变本地变量的操作中并不触发增量式求值。增量式求值不能在操作体内执行,除了表达式明确地以bind作为前缀。

然而,当你在一个增量式求值上下文中调用操作或者Java方法,此调用本身将被增量式求值。这意味着如果此调用变成了对操作或者Java方法的全新调用(由于此调用被增量式求值),那么它所用到的任何参数值将被使用并返回新值。

译者注:此处的新值是与不进行增量式求值相比。

相反,在增量式求值上下文中调用函数,此函数只能被调用一次,而其求值结果也将被合并到调用求值树中。

增量式求值是JavaFX的主要特征,它使定义复杂的动态GUI声明成为了可能。懒惰求值的特性常用在处理像tree或者graph这样的递归数据结构上。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值