/jEdit/tags/jedit-4-4-1/org/gjt/sp/jedit/bsh/commands/eval.bsh
# · Unknown · 75 lines · 65 code · 10 blank · 0 comment · 0 complexity · 0251c9dade841afedcc85f89d1ecc313 MD5 · raw file
- /**
- Evaluate the string in the current interpreter (see source()).
- Returns the result of the evaluation or null.
- <p>
- Evaluate a string as if it were written directly in the current scope,
- with side effects in the current scope.
- <p>
- e.g.
- <code><pre>
- a=5;
- eval("b=a*2");
- print(b); // 10
- </pre></code>
- <p>
- eval() acts just like invoked text except that any exceptions generated
- by the code are captured in a bsh.EvalError. This includes ParseException
- for syntactic errors and TargetError for exceptions thrown by the evaluated
- code.
- <p>
- e.g.
- <pre>
- try {
- eval("foo>>><>M>JK$LJLK$");
- } catch ( EvalError e ) {
- // ParseException caught here
- }
- try {
- eval("(Integer)true"); // illegal cast
- } catch ( EvalError e ) {
- // TargetException caught here
- print( e.getTarget() ) // prints ClassCastException
- }
- </pre>
- <p>
-
- If you want eval() to throw target exceptions directly, without wrapping
- them, you can simply redefine own eval like so:
- <pre>
- myEval( String expression ) {
- try {
- return eval( expression );
- } catch ( TargetError e ) {
- throw e.getTarget();
- }
- }
- </pre>
- <p/>
- Here is a cute example of how to use eval to implement a dynamic cast.
- i.e. to cast a script to an arbitrary type by name at run-time where the
- type is not known when you are writing the script. In this case the type
- is in the variable interfaceType.
- <pre>
- reference = eval( "("+interfaceType+")this" );
- </pre>
- <p>
- Returns the value of the expression.
- <p>
- Throws bsh.EvalError on error
- <p>
- @return the value of the expression.
- @throws bsh.EvalError on error
- */
- bsh.help.eval = "usage: eval( String expression )";
- Object eval( String expression ) {
- return this.interpreter.eval( expression, this.caller.namespace );
- }