[MacRuby-devel] assign value to identifier in runtime with objc codes
Laurent Sansonetti
lsansonetti at apple.com
Mon Jul 27 11:50:44 PDT 2009
Hi Linan,
You can evaluate "self" for that.
id ruby_self = [[MacRuby sharedRuntime] evaluateString:@"self"];
Laurent
On Jul 27, 2009, at 1:52 AM, Linan Wang wrote:
> Hi Laurent,
> Thanks for the explanation.
> A related question: how to get the "main/self" object of the macruby
> runtime?
>
> On Mon, Jul 27, 2009 at 6:50 AM, Laurent Sansonetti <lsansonetti at apple.com
> > wrote:
> Hi Linan,
>
> You can't really assign a Ruby local variable from Objective-C,
> since Ruby locals are generally scoped around a particular method,
> but you can assign to an instance variable of a given object, a
> constant, a global variable (or eventually a class variable, but
> this is evil, don't try that). Additionally, you can evaluate a
> local variable assignment of a given Binding object from Objective-
> C, but this becomes hardcore.
>
> A simple example, setting an instance variable of an object created
> from a Ruby class from Objective-C:
>
> $ cat /tmp/t.m
> #import <MacRuby/MacRuby.h>
>
> int main(void)
> {
> [[MacRuby sharedRuntime] evaluateString:@"class Foo; def foo;
> @foo; end; end"];
> id obj = [NSClassFromString(@"Foo") new];
> NSLog(@"-> %@", [obj performRubySelector:@selector(foo)]);
> [obj performRubySelector:@selector(instance_variable_set:)
> withArguments: @"@foo", @"hello", nil];
> NSLog(@"-> %@", [obj performRubySelector:@selector(foo)]);
> [obj performRubySelector:@selector(instance_variable_set:)
> withArguments: @"@foo", @"world", nil];
> NSLog(@"-> %@", [obj performRubySelector:@selector(foo)]);
> }
>
> $ gcc /tmp/t.m -o /tmp/t -fobjc-gc -framework MacRuby -framework
> Foundation
>
> $ /tmp/t
> 2009-07-26 22:48:29.366 t[53439:903] -> <null>
> 2009-07-26 22:48:29.368 t[53439:903] -> hello
> 2009-07-26 22:48:29.369 t[53439:903] -> world
>
> HTH,
> Laurent
>
>
> On Jul 26, 2009, at 5:10 PM, Linan Wang wrote:
>
> Hi everybody,
> I'm trying to migrate from FScript to MacRuby. The problem I'm
> facing now is how to assign values to variables in the macruby
> runtime with objc codes. In Fscript framework, it's fairly
> straightforward: setObject:forIdentifier call of FSInterpreter.
> I've tried rb_define_varible but it does not work. seems it requires
> rb_objc_ocval_to_rval function call to convert the objc object to
> ruby object first. Any help is appreciated. Thanks
>
> --
> Best regards
>
> Linan Wang
> _______________________________________________
> MacRuby-devel mailing list
> MacRuby-devel at lists.macosforge.org
> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
>
> _______________________________________________
> MacRuby-devel mailing list
> MacRuby-devel at lists.macosforge.org
> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
>
>
>
> --
> Best regards
>
> Linan Wang
> _______________________________________________
> MacRuby-devel mailing list
> MacRuby-devel at lists.macosforge.org
> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-devel/attachments/20090727/32a42eec/attachment.html>
More information about the MacRuby-devel
mailing list