`
suifongqi
  • 浏览: 55891 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

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

    博客分类:
  • JAVA
阅读更多
/*
* 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这样的递归数据结构上。

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    java1.8版本,jre,jfx

    Lambda表达式使得函数式编程风格在Java中变得可行,这对于处理并发和大数据流非常有用。另一个重大改进是方法引用来替代传统的匿名内部类,这减少了代码的复杂性。 JavaFX是Java的图形用户界面(GUI)工具包,它为...

    emed6004jfx工具`

    标题中的"emed6004jfx工具"很可能是指一个特定的软件或应用程序,而`.rar`文件格式表明这是一个压缩包,通常用于存储和传输多个文件。从描述中我们可以看到,这个压缩包的名字是`emed6004jfx.rar`,并且要求字符数...

    JFX例子

    JFX的例子是学习JavaFX的基础,通过这些示例,初学者可以快速了解并掌握JavaFX的基本概念和技术。 在提供的文件列表中,我们可以看到两个部分的教程:“JavaFX发现之旅:JavaFX Script With Eclipse 入门”。这部分...

    俄罗斯方块jfx源代码

    总的来说,“俄罗斯方块jfx”源代码为我们提供了一个学习和研究JavaFX游戏开发的实例,从中我们可以学到JavaFX的图形渲染、事件处理和游戏逻辑设计等多个方面的知识。无论你是Java初学者还是希望提升图形界面编程...

    欧码简音5JFX输入法

    简音输入法是专为希望学好中文发音,又希望超快 地输入汉字的人设计的,单字平均出字仅1.26码,远比 同类音码快;输入编码后视屏可同显...学用和输入培训就业,能使识字教学和打字教学兼容, 相得益彰、事半功倍!

    JFX3DModelImporters_EA_2014-02-09_jfx3d_JFX3DModelImporters_ea_源

    这个压缩包"JFX3DModelImporters_EA_2014-02-09_jfx3d_JFX3DModelImporters_ea_源"包含了一系列的jar包,它们专门设计用于帮助开发者将不同格式的3D模型导入到JavaFX应用中。这些导入器的早期访问版本(EA)发布于...

    nj4x-mt4开发中间件jfx 2.7.7版本

    MT4客户端不支持二次开发,但是服务器接口对外开发,jfx封装了Java接口,使得Java开发程序员可以轻易上手

    jfx1.2.6示例 实现了java连接MT4

    一个简单的实现了java连接MT4服务的例子

    NativeJFX:一个使用maven jfx插件和其他工具生成本机可执行文件和安装程序的演示应用程序

    一个使用maven jfx插件和其他工具生成本机可执行文件和安装程序的演示应用程序 构建本机捆绑包(Windows) 安装 5.5.6+ 安装 3.1.0+ 将两个程序都添加到PATH 运行mvn package 注意:制作启动器并与JRE捆绑可能...

    FreshInvoice_jfx82w_FreshInvoice_

    标题中的"FreshInvoice_jfx82w_FreshInvoice_"似乎是指一个特定的版本或构建号,这通常是软件更新或发布时使用的标识符。FreshInvoice是一个知名的开源PHP发票管理软件,它允许用户创建、管理和发送专业发票。这个...

    GameOfLife-JFX:初始项目

    总结,"GameOfLife-JFX:初始项目"是一个很好的学习和实践JavaFX以及理解生命游戏原理的平台。通过这个项目,开发者不仅可以提升JavaFX编程技巧,还能深入理解细胞自动机和复杂系统行为的模拟。

    jfx_game_project:game_prject_table_Type

    【标题】"jfx_game_project:game_prject_table_Type"是一个基于JavaFX开发的游戏项目,其核心特性在于利用表格(Table)元素...在实际开发过程中,不断探索和学习新的技术和最佳实践,是提高项目质量和用户体验的关键。

    j8draw:JDK8中的JFX 2D和3D绘图

    JDK8中的JFX 2D和3D工程图。 由于它使用的是JFX,因此需要确保您使用的是Oracle的JDK 1.8或更高版本。 如果在Eclipse中运行,由于即使在使用Oracle JDK时默认情况下也无法访问JFX,因此您将需要执行以下步骤,...

    demux-jfx-core-0.8.2.zip

    标题中的"demux-jfx-core-0.8.2.zip"是一个开源项目的版本压缩包,主要涉及的是JavaFX相关的库或框架。JavaFX是Oracle公司提供的一个用于开发桌面、移动和嵌入式设备的富客户端应用程序的平台。它提供了一组图形和...

    Mimaki JFX plus Series UJF-3042 透明液体打印指南

    ### Mimaki JFX plus Series UJF-3042 透明液体打印指南 #### 一、概述 Mimaki JFX plus Series UJF-3042是一款专为工业级UV喷墨打印设计的产品,它支持特殊效果打印,如透明液体打印等功能。该设备结合了先进的...

    MessagingApp-JFX:具有多选项卡用户界面的聊天应用程序

    MessagingApp-JFX 具有多选项卡UI(使用JavaFX构建)的聊天应用程序。 通过TCP / IP进行通信的服务器-客户端模型。 为JVM和Arduino微控制器编写的服务器/后端代码库(测试平台为ESP32s开发板)。 文件传输功能。

    JavaMathTrainer:基于JFX和FXML的简单数学方程式训练器

    JavaMathTrainer 基于JFX和FXML的简单数学方程式训练器。目的简单的UI程序,训练用户解决数学表达式。 也是使用eclipse和Oracle的Scene Builder制作的简单JFX应用程序的演示。去做困难“难” 更多表达式:逻辑表达式...

    jfxflow:一个简单的示例框架,用于构建使用“流”或“浏览器”样式导航的 JFX 2.0 应用程序,具有导航历史记录和后退、前进等

    jfxflow 一个简单的示例框架,用于构建使用“流”或“浏览器”样式导航的 JFX 2.0 应用程序,以及导航历史记录和后退、前进等。 作者:丹尼尔·兹沃伦斯基 Google Code 上的主页 博客 团体 样品

    jfx-launcher:openjfx启动器工具

    JFX-Launcher 一个openJfx的自动更新器,采用模块化API加载模块。 原理 在Launcher启动的时候,会对比本地配置与服务端配置是否一致,如果服务端配置与本地不一致,则进行拉取同步。 对比条件: 版本号是否一致 各个...

Global site tag (gtag.js) - Google Analytics