複数のメッセージキーワード

Objective-Cでは、引数をとるメソッド呼び出しには以下のような書式を使います。

[obj1 message1: 1.0 message2: 2.0]

PythonR言語では、キーワード引数を使うと

func1(arg1=1.0, arg2=2.0)

func1(arg2=2.0, arg1=1.0)

が同じ意味の関数呼び出しになるのですが、Objective-Cでは

[obj1 message2: 2.0 message1: 1.0]

というように順序を変えることはできないのだそうです。というか、順序を変えたものを二つ用意すると、異なる関数として呼び出されるのだとか*1。異なる定義をしてしまうと混乱しそうですが、それはそれで便利に使えるかも知れません。

*1:内部的(Object-C→Cのプリプロセス終了後?)にはmessage1:message2:という関数として扱われるから、message2:message1:とはマッチしない、というふうに考えても良いものなのでしょうか?