论坛首页 Java企业应用论坛

发布IK Expression开源表达式解析器 V2.1.0

浏览 5320 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-09-05  
Version2.1的变更:

 新增org.wltea.expression.ExpressionEvaluator. preparedCompile(String expression ,  Collection<Variable> variables)方法和类org.wltea.expression.PreparedExpression用来支持表达式预编译。用户可以像处理SQL语句那样,对需要循环执行的相同表达式进行预编译处理,而后设置不同的执行参数,得到不同的计算结果。详见”API说明”.
	/**
	 * Hello World Example
	 * @param args
	 */
	public static void main(String[] args){
		if(args.length == 0){
			args = new String[1];
			args[0] = "IK Expression V2.0.5";
		}
		//定义表达式
		String expression = "\"Hello \" + 版本";
		//给表达式中的变量 [版本] 付上下文的值
		List<Variable> variables = new ArrayList<Variable>();
		variables.add(Variable.createVariable("版本", args[0]));
		
		//预编译表达式
		PreparedExpression pe  = ExpressionEvaluator.preparedCompile(expression, variables);
		//执行表达式
		Object result = pe.execute();
		System.out.println("Result = " + result);
		
		//更改参数,再次执行预编译式
		pe.setArgument("版本", "IK Expression V2.0.6");
		result = pe.execute();
		System.out.println("Result = " + result);
		
	}	



 修订了对声明为Object类型的参数传入Integer、Double、String等类型的值时,会抛出类型不匹配异常的问题。原来版本中,参数必须显式申明为DATATYPE_OBJECT类型,新版本则不需要,所有java类型默认继承于Object。

 修改了ExpressionEvaluator的两个compile方法,不再抛出IllegalExpressionException异常,而改为运行期异常,以简化用户编码。


下载地址:
IKExpressionV2.1.0完整压缩包
IKExpressoin简易表达式引擎V2.1.0使用说明.pdf

google code开源地址:http://code.google.com/p/ik-expression/

更多详细请参阅RAR包内的《IKExpressoin简易表达式引擎V2.1.0使用说明.doc》文档




   发表时间:2009-09-14  
还是会出现类似问题啊?

函数参数类型不匹配,函数类型为:java.lang.Object 传入参数类型为:double
0 请登录后投票
   发表时间:2009-09-14  
dongfengpo25 写道
还是会出现类似问题啊?

函数参数类型不匹配,函数类型为:java.lang.Object 传入参数类型为:double


能说的细一些嘛?
又或者是你版本下的不对?
0 请登录后投票
   发表时间:2009-09-15  
版本是2.1的,然后定义一个函数,参数为OBJECT,传值类型为0.0,就报出错误,如上.
0 请登录后投票
   发表时间:2009-09-15   最后修改:2009-09-15
dongfengpo25 写道
版本是2.1的,然后定义一个函数,参数为OBJECT,传值类型为0.0,就报出错误,如上.


兄弟,给点代码和配置好伐?你这么说跟没说有啥区别啊

本人测试一下代码,没有你说的问题啊!

	/**
	 * Hello World Example
	 * @param args
	 */
	public static void main(String[] args){
		//定义表达式
		
		String expression = "$问好(数字类型)";
		//给表达式中的变量 [用户名] 付上下文的值
		List<Variable> variables = new ArrayList<Variable>();
		variables.add(new Variable("数字类型" , DataType.DATATYPE_OBJECT , new Integer(0)));
		//执行表达式
		PreparedExpression pe  = ExpressionEvaluator.preparedCompile(expression, variables);
		System.out.println("Result = " + pe.execute());
		
		pe.setArgument("数字类型", new Float(100));
		System.out.println("Result = " + pe.execute());		
		
		pe.setArgument("数字类型", new Double(100));
		System.out.println("Result = " + pe.execute());
		
		Object result = null;  
		result = ExpressionEvaluator.evaluate("$问好(1.0)");     
		System.out.println("Result = " + result);     
		result = ExpressionEvaluator.evaluate("$问好(1)");     
		System.out.println("Result = " + result);  
		
	}	



	<bean class="org.wltea.expression.test.TestFunctions">
		<function name="问好" method="sayHello">
			<parameter-type>java.lang.Object</parameter-type>
		</function>
	</bean>
0 请登录后投票
   发表时间:2009-09-15  
例如:
定义: ... Max(Object a,Object b)....
替换: Max() --- $Max
配置: <function name="MaxEx" method="MaxEx">
<parameter-type>java.lang.Object</parameter-type>
<parameter-type>java.lang.Object</parameter-type>
      </function>
调用: Max(1000,0.0)

这样子应该可以了吧
0 请登录后投票
   发表时间:2009-09-15  
dongfengpo25 写道
例如:
定义: ... Max(Object a,Object b)....
替换: Max() --- $Max
配置: <function name="MaxEx" method="MaxEx">
<parameter-type>java.lang.Object</parameter-type>
<parameter-type>java.lang.Object</parameter-type>
      </function>
调用: Max(1000,0.0)

这样子应该可以了吧


这个应该可以啊,要不你试试我上面的代码,应该是一样的。(有点怀疑你的jar包没更新)

不知道还有人有这样的问题啵,给点反馈啊。
0 请登录后投票
   发表时间:2009-09-16  
哦,可以了,无好意思啊. 可能是包没有应用好.
现在可以传值了.
谢谢!!!
0 请登录后投票
   发表时间:2009-09-16  
dongfengpo25 写道
哦,可以了,无好意思啊. 可能是包没有应用好.
现在可以传值了.
谢谢!!!


哈哈,那就好,那就好,这个很正常,我自己也常常被这种问题困扰,呵呵。
有问题希望多反馈,项目才能进步。
0 请登录后投票
   发表时间:2009-09-24  
为什么JDK版本这么高
1.6?
搞的我不能直接只用

楼主不用1.4的,最起码用个1.5吧
哎。。。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics