【译】Jep 文档(3)——变量(Variable)

本文介绍JEP中的变量管理,包括变量的表示、赋值、获取列表及观察等。支持未声明变量并允许赋值,可通过特定方法获取变量值。此外还提供变量观察者功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文连接:http://www.singularsys.com/jep/doc/html/variables.html

变量


  • 基础知识
  • 未声明和未定义的变量
  • 赋值
  • 获取变量列表
  • 变量观察者

基础知识

变量用类Variable来表示,并存储到VariableTable中。一个变量的值可以通过以下语句设置

Jep.addVariable(String name,Object val)

并且可以通过以下语句获取

Object Jep.getVariableValue(String name)

addVariable()方法也可以用来改变现有变量的值。对于double类型的值,使用Jep.addVariable(String, double)方法;对于复数,使用Jep.addVariable(String, double, double)方法。另一个方法getVariable(String)则返回Variable对象。这个类允许观察变量,同时提供了稍微快一点的获取和设置变量值的方法。


未声明和未定义的变量

在解释期间,解释器会检查变量是否存在。Jep.setAllowUndeclared(boolean flag)设置未声明变量的行为:

  1. * 允许未声明的变量(默认):*在解释表达式时,未声明的变量会被加入到VariableTable中去。
  2. 不允许未声明的变量:在这种情况下,在解释之前必须用addVariable()方法添加一个变量。如果遇到未声明的变量,会抛出ParseException异常。这种选择对于限制表达式中出现的变量时有用的。

在求值期间,将会检索变量的值。如果变量未定义(null),会抛出一个EvaluationException异常。如果没有使用addVariable()设置变量值,Null值将会存在。特别地,如果allowUndeclared为真,并且在解释时创建变量,这种情况就会发生。通过调用StandardEvaluator.setTrapNullValues(boolean flag)可以改变这种情况。Jep.setDefaultValue(Object)方法可以用来设置变量默认值。


赋值

赋值允许在方程中通过 = 操作符设置变量的值,所以可以用如下面的表达式赋值

x = 3

然后可以在表达式中使用指定的值,例如

y = x^2

并且y得到的值为9。允许在默认情况下赋值。要禁用赋值,应该调用主Jep对象的setAllowAssignment(boolean)函数。Jep需要调用setAllowUndeclared(true)来解释赋值方程。

重要:在解释变量值赋值之后,需要调用evaluate()方法。

// standard initialisation
Jep j = new Jep();
j.setAllowUndeclared(true);

// switch assignment facilities on
j.setAllowAssignment(true);

// parse assignment equations
try {j.parse("x=3");} catch (ParseException e) {}
// evaluate it - no need to save the value returned
try {j.evaluate();} catch (EvaluationException e) {}

// parse a second equation
try {j.parse("y=2");} catch (ParseException e) {}
try {j.evaluate();} catch (EvaluationException e) {}

// an equation involving the above variables
try {j.parse("x^y");} catch (ParseException e) {}
try {
    Object val3 = j.evaluate();
    System.out.println("Value is " + val3);
} catch (EvaluationException e) {}

获取变量列表

如果您使用了未知的向量集解释表达式(启用了allowUndeclared),您可能需要知道那些变量出现在表达式中。这里有两种方法获取变量列表。

第一种方法是使用getVariableTable方法。您可以通过检查返回的变量表的内容知道在解释时加入了那些变量。特殊地,VariableTable.getVariables()返回所有变量的列表。VariableTable的toString()方法将产生一个可打印的列表。

第二种方法是,在解释表达式之后,使用TreeAnalyzer类来检查表达式树。可以查看JavaDoc文档获取更多关于符合使用这个类的信息。


变量观察者

Variable类实现了观察者/可观察模式,从而允许了变量值改变时通知对象。使用Variable.addObserver(Observer)方法可以将类注册为变量的观察者。可以通过观察VariableTable来检查添加新变量的情况,查看类的VariableTableObserver以方便观察VariableTable 和它的 Variables.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值