github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/go/types/unify.go (about) 1 // 「go test -run=Generate -write=all」によって生成されたコードです。編集しないでください。 2 3 // Copyright 2020 The Go Authors. All rights reserved. 4 // Use of this source code is governed by a BSD-style 5 // license that can be found in the LICENSE file. 6 7 // このファイルは型の統一を実装しています。 8 // 9 // 型の統一は、与えられた(束縛された)型パラメータのリスト内で発生する可能性がある 10 // xとyの2つの型が構造的に等しくなるように試みます。もしxとyが構造的に異なる場合 11 // (例えば、[]T vs chan Tのような場合)、または型パラメータに対して矛盾する型が 12 // 決定された場合、統一は失敗します。統一が成功した場合、副作用として、束縛された型 13 // パラメータの型が決定されるかもしれません。 14 // 15 // 統一には通常、与えられた統一子uに対して複数回のu.unify(x, y)の呼び出しが必要であり、 16 // さまざまなxとyの型の組み合わせが必要です。各呼び出しでは、追加の型パラメータの型が 17 // 副作用として決定され、uに記録される場合があります。 18 // もし呼び出しが失敗した場合(falseを返す場合)、統一も失敗します。 19 // 20 // 統一の文脈において、2つの型の構造的な等価性は、片方の型が定義済みであるかどうかに 21 // 関わらず、定義済みの型とその基になる型の違いを無視します。 22 // また、(外部の未指定)型パラメータとそのコア型の違いも無視します。 23 // もし2つの型が構造的に等しくない場合、それらはGoの同一の型ではありません。 24 // しかし、もし構造的に等しい場合、これらはGoの同一であるか、少なくとも代入可能であるか、 25 // 制約の型セットにあるかもしれません。 26 // これらが実際に同一であるか、代入可能であるかは、インスタンス化と関数引数の渡し方に 27 // よって決まります。 28 29 package types