[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