Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
Apache JEXL 脚本引擎调用上下文的 setter 方法来完成脚本中的分配。我提供的上下文将接管存储分配。
a = mylib.hello();
声明局部变量时,上下文的等价物是什么?
var b = mylib.goodbye();
在我的应用程序设计中,我需要拦截每个分配,并且每个变量都可以定位。
本地变量的分配机制是什么,它们存储在哪里?我如何能够重载/覆盖/拦截该机制?
为了处理局部变量和脚本参数,JEXL 在解析时创建充当可链接符号表的作用域(Scope)。对于每个变量/参数,在解析范围内创建一个符号。每个脚本和 lambda/函数有一个作用域。在执行期间,每个作用域都会创建一个框架来保存符号的值。要拦截分配局部变量,您必须派生(内部)Frame 类并覆盖“set”方法;只有几个构造函数调用,所以它不是一个巨大的变化。请注意,此信息基于 3.2 主干,您可能最终会得到一个本地分支(包保护类等)。如果可以的话,了解为什么需要捕获会很有趣。干杯