首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于绑定的Groovy对象跟踪

用于绑定的Groovy对象跟踪
EN

Stack Overflow用户
提问于 2013-04-01 06:22:04
回答 1查看 285关注 0票数 2

我正在开发一个Groovy库,通过简单的语法和丰富的事件处理程序提供变量绑定/同步。首先,我的目标是运行以下内容进行归档:

代码语言:javascript
复制
def a = 1 
def b = 1
def c = 1
a bind { b + c }
assert a==2 & b==1 & c==1
b = 3
assert a==4 & b==3 & c==1
c = -1
assert a==2 & b==3 & c==-1

我希望避免使用Java FX方法来提供额外的类,而是使用此功能来增强对象。

我被困在寻找一些物体的追踪。Groovy没有重载赋值表达式。目前,我在繁重的AST转换中看到了解决方案(也许dsld可能会有所帮助)。

也许有一些对象跟踪,事件或其他什么,我错过了?

EN

回答 1

Stack Overflow用户

发布于 2013-04-01 09:27:07

我假设您正在使用脚本编写代码。用下面的想法做了你想做的事情:

与使用Script.binding将值绑定到键相比,最好创建一个Variable类来表示value,并将在Variable对象上调用的变量name;

  • Every方法委托给它的值;

  • 一个Listener类,它封装了对更新操作和Variable对象的引用;

  • 一个updateListeners()方法,用于更新侦听器;

  • bind(closure)方法只是绕过了变量对象的闭包。它很可能会被删除并写成a { b + c }

类侦听器{闭包操作;变量变量}类变量实现GroovyInterceptable { String name;def value def invokeMethod(String method,args) { def var = args var.class ==变量?值。“$method”(var.value):值。“$method”(Var)}} Variable.metaClass.call ={ Closure operation -> binding‘Listener’<<新监听器(操作:操作,变量:委托) updateListeners() } def bind(闭包操作){var.value} def updateListeners() { binding.listeners.each { it.variable.value = it.operation() }} setProperty(String prop,值){ if (!binding.hasVariable('listeners'))绑定‘listeners’= [] bindingprop =新变量(名称:属性,值:值) updateListeners() }

你的测试就像个护身符。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15735247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档