Re: A problem with condition evaluating

Monique Maker <[email protected]>
Newsgroups gmane.comp.java.enhydra.shark
Message-ID <[email protected]>
Hi,

BeanShell uses Java comparison rules, not JavaScript ones. Try this 
comparison:

isback && (backgroup.equals("billact_apply"))

May be it would be better to use even

isback && (backgroup.equalsIgnoreCase("billact_apply"))

but it depends on your coding habits.

Regards,
Monique

[email protected] wrote:

>hi all,this problem maybe it's BeanShell's or Shark's.
>When I set an evaluate-condition in xpdl file,the expression is:
>--------------------------------------
>isback && (backgroup=="billact_apply")
>--------------------------------------
>In the expression,isback is boolean type and backgroup is String type.
>But I found that the return value was false when isback's value is true and backgroup's value equal "billact_apply",
>so I download BeanShell's source code and debuging from the evaluateExpression method of the org.enhydra.shark.scripting.BshEvaluator.java.
>I found BeanShell has some problem.
>To affirm these,I test again. test code:
>--------------------------------------
>            Interpreter interpreter1 = new Interpreter();
>            Interpreter interpreter2 = new Interpreter();
>            // >>>test 1: as basic type
>            interpreter1.set("isback", true);
>            interpreter1.set("backgroup", "billact_apply");
>            System.out.println(interpreter1.eval("isback && (backgroup==\"billact_apply\")"));
>
>            // >>>test 2: As Object type,like the org.enhydra.shark.scripting.BshEvaluator.prepareContext(Interpreter interpreter, Map context)
>            java.lang.Object value1 = new Boolean(true);
>            interpreter2.set("isback", value1);
>            java.lang.Object value2 = new String("billact_apply");// new StringBuffer("billact_apply");
>            interpreter2.set("backgroup", value2);
>            System.out.println(interpreter2.eval("isback && (backgroup==\"billact_apply\")"));
>--------------------------------------
>
>run test code,the return value is:
>--------------------------------------
>true
>false
>--------------------------------------
>
>When I modified bsh.BSHBinaryExpression.java code:
>...
>        switch (kind) {
>
>        case EQ:
>
>                return new Primitive((lhs == rhs));
>
>        case NE:
>            
>            	return new Primitive((lhs != rhs));
>
>...
>changed to:
>...
>        switch (kind) {
>
>        case EQ:
>
>            if (lhs instanceof String || rhs instanceof String)
>        	
>                return new Primitive(lhs.equals(rhs));
>
>            else
>                        	
>                return new Primitive((lhs == rhs));
>
>        case NE:
>            
>            if (lhs instanceof String || rhs instanceof String)
>
>            	return new Primitive(!lhs.equals(rhs));
>
>            else
>
>            	return new Primitive((lhs != rhs));
>
>...
>And then run test code again,the return value is:
>--------------------------------------
>true
>true
>--------------------------------------
>
>In addition,Can update the bsh.jar?Now Shark's is bsh-1.2b8.jar,the current release is bsh-2.0b4.jar.
>
>
>  
>
message-footer.txt (text/plain, 271 B)
--
You receive this message as a subscriber of the [email protected] mailing list.
To unsubscribe: mailto:[email protected]
For general help: mailto:[email protected]?subject=help
ObjectWeb mailing lists service home page: http://www.objectweb.org/wws
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.