`
linliangyi2007
  • 浏览: 1004423 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

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

阅读更多
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》文档




分享到:
评论
15 楼 a78113534 2015-08-01  
感谢大神,在安卓里面调用成功了。
14 楼 linliangyi2007 2009-09-24  
nick216 写道
还想请教一下:
Object result = ExpressionEvaluator.evaluate("$ABS(-2+3.0)+3");
		System.out.println("Result = " + result);

这句我可以执行
Object result = ExpressionEvaluator.evaluate("$ABS(-2+3)+3");
		System.out.println("Result = " + result);

这句我就报错?


你的问题可能是double类型与int类型的兼容问题,已经修正,请到这里下载新版本:IK Expression V2.1.1
13 楼 linliangyi2007 2009-09-24  
nick216 写道
还想请教一下:
Object result = ExpressionEvaluator.evaluate("$ABS(-2+3.0)+3");
		System.out.println("Result = " + result);

这句我可以执行
Object result = ExpressionEvaluator.evaluate("$ABS(-2+3)+3");
		System.out.println("Result = " + result);

这句我就报错?


给我你的$ABS的声明,以及报的异常,谢谢
12 楼 nick216 2009-09-24  
也想朋友们推荐另外一个开源项目
jeval
我觉得也不错
除了不知道“?”运算以外

11 楼 nick216 2009-09-24  
还想请教一下:
Object result = ExpressionEvaluator.evaluate("$ABS(-2+3.0)+3");
		System.out.println("Result = " + result);

这句我可以执行
Object result = ExpressionEvaluator.evaluate("$ABS(-2+3)+3");
		System.out.println("Result = " + result);

这句我就报错?
10 楼 linliangyi2007 2009-09-24  
nick216 写道
为什么JDK版本这么高
1.6?
搞的我不能直接只用

楼主不用1.4的,最起码用个1.5吧
哎。。。


抱歉抱歉,关键是公司的开发环境统一1.6了,不好切换的说,而且1.6的性能和新特性还是很不错的
9 楼 nick216 2009-09-24  
为什么JDK版本这么高
1.6?
搞的我不能直接只用

楼主不用1.4的,最起码用个1.5吧
哎。。。
8 楼 linliangyi2007 2009-09-16  
dongfengpo25 写道
哦,可以了,无好意思啊. 可能是包没有应用好.
现在可以传值了.
谢谢!!!


哈哈,那就好,那就好,这个很正常,我自己也常常被这种问题困扰,呵呵。
有问题希望多反馈,项目才能进步。
7 楼 dongfengpo25 2009-09-16  
哦,可以了,无好意思啊. 可能是包没有应用好.
现在可以传值了.
谢谢!!!
6 楼 linliangyi2007 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包没更新)

不知道还有人有这样的问题啵,给点反馈啊。
5 楼 dongfengpo25 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)

这样子应该可以了吧
4 楼 linliangyi2007 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>
3 楼 dongfengpo25 2009-09-15  
版本是2.1的,然后定义一个函数,参数为OBJECT,传值类型为0.0,就报出错误,如上.
2 楼 linliangyi2007 2009-09-14  
dongfengpo25 写道
还是会出现类似问题啊?

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


能说的细一些嘛?
又或者是你版本下的不对?
1 楼 dongfengpo25 2009-09-14  
还是会出现类似问题啊?

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

相关推荐

Global site tag (gtag.js) - Google Analytics