Background: I want to let some existing Ruby projects run on MacRuby which depend on several C extensions. Since I have done some Objective C(++) before, I thought I would just follow the macruby.org guide on how to write an Objective C bundle for use with MacRuby. (Seemed conceptually easier to me than using FFI.)

My problem is that I don't know how to best conceal the fact that the wrapped objects are now NSObjects, not typical C extension objects. I can monkey-patch the method signature style, but I feel that it isn't so trivial for constructors. The reasons for that probably reach deeper into MR/Cocoa than I have looked so far.

The existing Ruby code expects to be able to do:

MyCObject.new(2, 4)

however my wrapped-through-Objective-C library only offers:

MyCObject.alloc.initWithA 2, b: 4

I have tried to just override MyCObject.new to call alloc.initWithA:b:, but that breaks as soon as the user wants to override "initialize". He may even want to call "super" at a defined point in there.

I have also tried writing a "initialize" method that calls "initWithA:b:", and calling "alloc.initialize(a, b)" from within MyCObject.new. I expected that this may allow for overriding #initialize. Instead, it leads to a segfault.

Is there a way to completely hide the fact that MyCObject is actually not a plain old Ruby class?

Julian

_______________________________________________
MacRuby-devel mailing list
MacRuby-devel@lists.macosforge.org
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel

Reply via email to