On Thu, Feb 28, 2008 at 3:15 PM, Yukihiro Matsumoto <matz / ruby-lang.org> wrote:
> Hi,
>
>  In message "Re: [ANN] MacRuby"
>
>     on Fri, 29 Feb 2008 08:04:38 +0900, "Laurent Sansonetti" <laurent.sansonetti / gmail.com> writes:
>
>  |>  I still think having dedicated syntax for Objective-C call is better
>  |>  than overriding normal call.
>  |>
>  |>
>  |>   duck.foo: 1 bar: 2
>  |>
>  |>  or
>  |>
>  |>
>  |>   duck.foo: 1, bar: 2
>  |>
>  |>  maybe?  I am not sure if the parser allows this or not yet.
>  |>
>  |
>  |I have been thinking about this too, but I personally believe that it
>  |doesn't reveal very pretty when messaging Objective-C methods with
>  |only one argument.
>  |
>  |  duck.foo: 1
>
>  You can still map one-argument method to duck.foo(1) as it does now.
>

Yes, but it won't be consistent with multiple-argument calls then.

>  |But maybe we will switch to it soon, because it's more consistent with
>  |Objective-C (no potential ambiguities). But it doesn't feel very Ruby.
>
>  That is very important design decision.  Objective-C-ish calling or
>  Ruby-ish calling.  The latter makes program consistent, but the former
>  makes program obvious. Hmm.
>

Definitely! I have been thinking about this a lot, but I couldn't come
with something better than what's currently in MacRuby.

duck.foo               # may call foo
duck.foo(1)           # may call foo:
duck.foo(1, key:2) # may call foo:key:

There is also the problem of defining methods with keyed arguments. Currently:

def foo(x, key:y); end # will register foo:key:

Laurent