[MacRuby-devel] integrating macruby into cocoa apps
Laurent Sansonetti
laurent.sansonetti at gmail.com
Tue Mar 18 15:25:06 PDT 2008
On Tue, Mar 18, 2008 at 3:16 PM, Benjamin Stiglitz <ben at tanjero.com> wrote:
> >> However, I don't see any obvious
> >> way to hand off an NSString with code and have it execute in some
> >> environment. Does such an API exist?
>
> > At the moment the only thing you can do is to use the C APIs, which
> > are not really user-friendly.
> >
> > We could introduce a convenience facility to evaluate code.
> >
> > NSNumber *number = [@"1+2+3+4+5" evaluateAsRubyExpression];
>
> This is OK, but I'm not too keen on adding the extension method when
> there's already something else that works.
>
> > Or directly calling Kernel#eval from Objective-C, as Ben said, which
> > should work in theory, though I didn't try it yet.
>
> This will be easier when strings bridge properly. It seems like the
> cleanest way to me. You can even make a new proc and then call it over
> and over again.
>
> RbObject *squareIt = [RbKernel eval:@"Proc.new {|n| n*n}"];
> NSNumber *twentyFive = [squareIt call:[NSNumber numberWithInt:5]];
>
In theory this should work already, MacRuby will (temporarily) convert
the NSString into a Ruby String.
In practice it may not work because of bugs :)
Note that the prefix is RB not Rb, and that it's only included when
there is already an Objective-C class with that name. (Because when
you define "Foo" in Ruby, you expect it to be "Foo" in IB.)
> All this being said, it'd be nice to have a real quick way to boot up
> an embedded MR for "normal" Objective-C apps.
>
I will write a sample that illustrates that.
Laurent
More information about the MacRuby-devel
mailing list