1

私は迅速にジェネリックを初めて使用し、いくつかの本を読んでいるときに、理解できないものに出くわしました。ジェネリック関数では、いつ型パラメーター (関数名の直後) を使用するのが適切ですか? そしてそれが不適切なのはいつですか?

これが使用されていない例 (署名のみ; 標準ライブラリから):

func sorted(isOrderedBefore: (T, T) -> Bool) -> Array<T>

これが使用されている場所の例です(私が読んでいる本から取られました):

func emphasize<T>(inout array:[T], modification:(T) -> T) {
        for i in 0 ..< array.count {
            array[i] = modification(array[i])
        }
}

Apple の迅速な言語リファレンス、セクション: Generic Parameters and Arguments を読みました。しかし、それはまだ私には明らかではありません。洞察をお寄せいただきありがとうございます。  

4

1 に答える 1

3

最初の例では、ジェネリック パラメーターは、それが定義されている型から取得されます。すでにジェネリック型を持つ Array 内で宣言されていると思いますT

2 番目の例では、関数自体がジェネリック パラメーターを宣言しています。私が間違っていなければ、この関数はグローバル関数です。generic を定義するスコープ内にまだありませんT

スコープ内で既に宣言されているものを隠したり、置き換えようとする関数で新しいジェネリック パラメーターを宣言することは不適切です。たとえば、配列を拡張する場合、これは不適切です。

extension Array {
    func myFunc<T>() {
    }
}

ここでは、Array の宣言で既に宣言されているTオリジナルを覆い隠す new を定義しています。T

ジェネリック型が必要な他のすべての状況では、それを自分で宣言する必要があります。

于 2014-12-20T23:39:15.140 に答える