I’m using the JSR223 engine inside JRuby 1.6.2.
In the following example, I declare a method using a new context. I
would think that method would then only be useable when specifying
that context. However, I can execute that method:
- using a completely separate context
- just using the engine’s built-in context
Shouldn’t the declaration be isolated to contextA?
=============
import javax.script._
val scriptManager = new ScriptEngineManager
val engine = scriptManager.getEngineByName(“jruby”)
// Evaluate method declaration against contextA
val contextA = new SimpleScriptContext
engine.eval(“def helloWorld; “Hello world!”; end”, contextA)
// Should print “Hello World!”
println("Evaling withContextA: " + engine.eval(“helloWorld”, contextA))
// I would think this should blow up, since contextB shouldn’t have
this method definition
// since I evaluated it against contextA
val contextB = new SimpleScriptContext
println("Evaling withContextB: " + engine.eval(“helloWorld”, contextB))
// I would think this should blow up, since evaluting against just the
default engine context
println("Evaling withEngine: " + engine.eval(“helloWorld”))
For further information, this code does blow up as I expect when using
Javascript:
import javax.script._
val scriptManager = new ScriptEngineManager
val engine = scriptManager.getEngineByName(“javascript”)
// Evaluate method declaration against contextA
val contextA = new SimpleScriptContext
engine.eval(“function helloWorld() {return “Hello world!”;}”,
contextA)
// Should print “Hello World!”
println("Evaling withContextA: " + engine.eval(“helloWorld();”,
contextA))
// I would think this should blow up, since contextB shouldn’t have
this method definition
// since I evaluated it against contextA
val contextB = new SimpleScriptContext
println("Evaling withContextB: " + engine.eval(“helloWorld();”,
contextB))
Matt H. wrote in post #1004235:
For further information, this code does blow up as I expect when using
Javascript:
import javax.script._
val scriptManager = new ScriptEngineManager
val engine = scriptManager.getEngineByName(“javascript”)
// Evaluate method declaration against contextA
val contextA = new SimpleScriptContext
engine.eval(“function helloWorld() {return "Hello world!";}”,
contextA)
// Should print “Hello World!”
println("Evaling withContextA: " + engine.eval(“helloWorld();”,
contextA))
Appears the old wiki has some example codes that the new doesn’t:
http://kenai.com/projects/redbridge/pages/Home
I’m not entirely sure but searching for
“org.jruby.embed.localcontext.scope” might be helpful.
-roger