home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World 2007 June
/
PCWorld_2007-06_cd.bin
/
multimedia
/
ppsee
/
PPSeeSetup.exe
/
lib
/
bsh-commands-2.0b4.jar
/
bsh
/
commands
/
eval.bsh
< prev
next >
Wrap
Text File
|
2005-05-23
|
2KB
|
76 lines
/**
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 );
}