You can find many hosting examples in HostingTests.cs.
As for global and top-level local variables:
- Variables in ScriptRuntimeRuntime.Globals are mapped to global
constants (ie. constants on Object).
- Variables in local ScriptScope are not mapped to Ruby top-level
local variables. They are looked up via method_missing on a top-level singleton
object. Ruby top-level program executes in a context where "self" is a
singleton of Object. IronRuby defines method_missing on this singleton. If a
method name ends with "=" it writes to the scope, otherwise it reads from the
scope.
ScriptScope scope = Engine.CreateScope();
scope.SetVariable("x", 1);
scope.SetVariable("y", 2);
Engine.Execute("self.z = x + y", scope);
int result = scope.GetVariable<int>("result");
Assert(result == 3);
Ruby global variables don't have any mapping to DLR scopes. We don't have any
well designed API for them yet, you can do this for now:
Ruby.GetExecutionContext(Engine).DefineGlobalVariable("foo", 123);
Tomas
From: [email protected]
[mailto:[email protected]] On Behalf Of Meinrad Recheis
Sent: Monday, February 09, 2009 3:13 AM
To: ironruby-core
Subject: [Ironruby-core] setting global variables in embedded ironruby
interpreter
Hello,
I am very pleased that I got everything working and found iron ruby in a quite
usable state for me. Congratulations.
Question: How do you set a global variable from C#? I found a workaround via
setting a local variable scope.SetVariable("a", obj) in the scope and assigning
it to a global via engine.Execute("$a=a", scope).
The Runtime.Globals.GetVariable and SetVariable don't seem to get / set the
ruby globals.
Please clarify.
BTW: as for local variables: scope.GetVariableNames() does return an empty
list. Again a workaround is Execute("local_variables", scope).
-- henon
_______________________________________________
Ironruby-core mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/ironruby-core