Hi,

On Oct 14, 2009, at 2:34 AM, B. Ohr wrote:

Hi,

Am 14.10.2009 um 11:04 schrieb Laurent Sansonetti:

Hi,

On Oct 14, 2009, at 1:03 AM, B. Ohr wrote:

Hi all!

Using Cocoa in MacRuby is sometimes a hard job, because all documentation, examples and sample code is Obj-C. For example, I found this piece of code '[NSNumber numberWithBool:NO]' and asked myself how to write that in Macruby.

You can simply pass true or false and MacRuby will do the conversion for you.

Oh yes, in my example project , I automatically used true and it worked. But then I began asking myself, how can I be shure that this is the correct way and what would an absolute beginner do and then i opened macirb... ;-)


I opened macirb and typed:

> NSNumber.numberWithBool 0
=> false

First I had to laugh and then I thought: Hey implementors of macruby, you really did a great job!

And NSNumbers are converted to Ruby types as you just experienced :)

In the docs

+ (NSNumber *)numberWithBool:(BOOL)value

gives a NSNumber and not a TrueClass or FalseClass as in Macruby. I only wanted to say how impressed I am!

Hehe, thank you :)

What do you think about a table on http://www.macruby.org/ which lists all such short (and astonishing) examples. Or even better, why not create a command in the services menu which translates a Obj-C sequence (by regexp).

I think a short tutorial/page on the website would be great, indeed. I don't believe it is easily possible to write an Objective- C -> MacRuby convertor that works most/all the time (because of the C nature of ObjC).


Such a cheat sheet can easily show the beauty of MacRuby and the "noisiness" of Obj-C! ;-)

If you or anyone are willing to work on this, feel free and we can integrate it later on the website.

I agree that a real translator is impossible. What I want is a simple text processing which removes all the [foo: bar baz] and replaces it with foo.bar(baz).

I see. That should be easy then :)

BTW, the second example I tried is:

> NSDictionary.dictionaryWithObjectsAndKeys "a", "b", nil

but instead of {"b"=>"a"} I got a seg fault! (ticket is filed)

I replied to the ticket, it seems you forgot to do `framework 'Foundation'' first.


Oh, my fault! But wouldn't it be better NOT to respond with a segment fault (this irritated me) and instead throw an normal ruby exception? (But perhaps that is impossible.)

It's unfortunately not possible, we crash when calling the method because we don't use the right ABI conventions (since the method is variadic) and there is no way we can determine that at runtime.

This is why we need to load the framework metadata (BridgeSupport file) in order to handle these methods.

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

Reply via email to