原文连接: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)
设置未声明变量的行为:
- * 允许未声明的变量(默认):*在解释表达式时,未声明的变量会被加入到VariableTable中去。
- 不允许未声明的变量:在这种情况下,在解释之前必须用
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.