「Go/関数」の版間の差分

削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
→‎any を使った方法: 省略していた型引数を明示した
タグ: 2017年版ソースエディター
Ef3 (トーク | 投稿記録)
タグ: 2017年版ソースエディター
188 行
| accessdate=2021-09-30
}}</ref>。
 
=== 型パラメーター提案の要旨 ===
* 関数は、角括弧を使っているものの、それ以外は通常のパラメータリストのように見える追加の型パラメータリストを持つことができます。{{code|lang=go|func F[T any](p T) { .... } }}
* これらの型パラメータは、通常のパラメータや関数本体で使用することができます。
* 型は、型パラメータリストを持つこともできます。{{code|lang=go|type M[T any] []T}}
* 各型パラメータは、各通常のパラメータが型を持つように、型制約を持ちます。{{code|lang=go|func F[T Constraint](p T) { .... } }}.
* 型制約はインターフェース型です。
* 新しい宣言済みの名前 <code>any</code> は、任意の型を許可する型制約です。
* 型制約として使用されるインターフェイス型は、制約を満たす型引数のセットを制限するために、追加の要素を埋め込むことができます。
** 任意の型(an arbitrary type) <code>T</code> は、その型に制限します。
** 近似要素(an approximation element) <code>~T</code> は、基礎となる型が <code>T</code> であるすべての型に制限する。
** 共有要素(a union element) <code>T1 | T2 | ...</code> は、リストされた要素のいずれかに制限されます。
* ジェネリック関数は、制約条件で許可されたすべての型でサポートされる操作のみを使用できます。
* 一般的な関数や型を使用するには、型の引数を渡す必要があります。
* 型推論では、一般的なケースでは、関数呼び出しの型引数を省略することができます。
 
=== 数値型に限定したジェネリック関数 ===