4

この構文が有効であることに気づいていませんでした。

+ (void) methodName:(TypeObject *)typeObject1:(TypeObject *)typeObject2;

これは、次のように呼ばれます。

[object methodName:obj1:obj2];

私はそれが醜くて気がかりだと思いますが、それは構築されます。

誰かがこれが有効である理由を説明するリファレンスを私に指摘できますか?

FWIWこれが由来するコードベース(継承)は、ずさんな、怠惰なもの、数十のスペルミスがたくさんあり、二度と読む必要のない誰かによってフォーマットされたように見えます。(再びクラストを解除していただきありがとうございます。)

4

1 に答える 1

8

これはよく知られており、文書化された機能です(pdf、p.14)

原則として、Rectangleクラスは、代わりsetOrigin:: に2番目のパラメーターのラベルのないメソッドを実装できます。これは次のように呼び出されます。

[myRectangle setOrigin:30.0 :50.0]; // This is a bad example of multiple parameters

しかし、アップルは、キーワードなしでパラメータを渡すことを誰もが思いとどまらせます

すべての引数の前にキーワードを使用します。
- (void)sendAction:(SEL)aSelector to:(id)anObject forAllCells:(BOOL)flag;->そうです。
- (void)sendAction:(SEL)aSelector :(id)anObject :(BOOL)flag;->間違っています。

なぜObjective-Cの作成者によって許可されたのか、私にはわかりません。たぶんそれはSmalltalkの遺産と関係があります。

于 2012-11-21T01:46:15.893 に答える