[Ironruby-core] ironruby hosting as scripting engine

Dotan N. dipidi at gmail.com
Fri Nov 6 16:54:12 EST 2009


Kevin,
Yep i also needed to support input output but it all goes through the
"$script" variable back to the backing C# object. for now, it makes it
easier to have events and debugging. all in all the end result is that i
provide an "API" exposed through $script.

Jimmy,
Thanks, I clearly overlooked that.


On Fri, Nov 6, 2009 at 11:16 PM, Jimmy Schementi <
Jimmy.Schementi at microsoft.com> wrote:

> Your solution sounds fine. To answer you first question though:
> engine.Execute("class Script; end") will always give you nil; classes return
> nil when defined:
>
>
>
> >>> class Foo
>
> ... end
>
> => nil
>
>
>
> You’ll have to do this to get the actual class object:
>
>
>
> engine.Execute("class Script; end; Script")
>
>
>
> ~Jimmy
>
>
>
> *From:* ironruby-core-bounces at rubyforge.org [mailto:
> ironruby-core-bounces at rubyforge.org] *On Behalf Of *Dotan N.
> *Sent:* Friday, November 06, 2009 11:17 AM
> *To:* ironruby-core at rubyforge.org
> *Subject:* [Ironruby-core] ironruby hosting as scripting engine
>
>
>
> Hi guys sorry for the lengthy mail but i believe this is interesting since
> i've found a solution that someone else could use.
>
> just had a session of trying to embed IR in my application.
> I'm defining a user script which contains some initialization code and a
> special worker function 'execute'
>
> this is the "user script":
>
> script1.s --------------------------------------------------------
> $script.declare "version 1"
>
> def execute
>    $script.report "success"
> end
> --------------------------------------------------------
>
>
> what i'm doing is setting "script" as a global variable that is a gateway
> to my application.
> I've tried this way first:
>
> wrapping script1.s with "class Script <scriopt1.s content> end"
> and doing Engine.Execute on it.
>
> I expected to get a RubyObject as a result, which is the Script class.
>
> then with the RubyObject i would do ObjectOperations.Invoke("execute");
> when ever i wish.
>
> I had 2 problems:
>
> 1. the RubyObject was always null. any idea why?
> 2. I couldn't really define a global variable properly (i've used the $a =
> a trick from the forum)
>
>
>
> eventually i've realized this solution:
> 1. set global variable via RubyContext.DefineGlobalVariable
> 2.  i run everything on my script scope and Execute script1.s directly
> given a ScriptScope
> 3. do InvokeMember on the ScriptScope itself
>
>
> from googling i've noticed the solution changed a lot along time.
> so what is the proper way to do it?
>
>
> Thanks!
>
>
>
> _______________________________________________
> Ironruby-core mailing list
> Ironruby-core at rubyforge.org
> http://rubyforge.org/mailman/listinfo/ironruby-core
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://rubyforge.org/pipermail/ironruby-core/attachments/20091106/45aacb2b/attachment-0001.html>


More information about the Ironruby-core mailing list