github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/go/types/interface.go (about) 1 // Copyright 2021 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package types 6 7 import ( 8 "github.com/shogo82148/std/go/token" 9 ) 10 11 // インターフェースはインターフェース型を表します。 12 type Interface struct { 13 check *Checker 14 methods []*Func 15 embeddeds []Type 16 embedPos *[]token.Pos 17 implicit bool 18 complete bool 19 20 tset *_TypeSet 21 } 22 23 // NewInterfaceは与えられたメソッドと埋め込まれた型に対して新しいインターフェースを返します。 24 // NewInterfaceは提供されたメソッドの所有権を持ち、欠けているレシーバーを設定することでその型を変更する可能性があります。 25 // 26 // 廃止予定: 代わりに任意の埋め込まれた型を許可するNewInterfaceTypeを使用してください。 27 func NewInterface(methods []*Func, embeddeds []*Named) *Interface 28 29 // NewInterfaceTypeは、指定されたメソッドと埋め込み型に対して新しいインターフェースを返します。 30 // NewInterfaceTypeは、提供されたメソッドの所有権を受け取り、抜けているレシーバを設定することで型を変更する場合があります。 31 // 32 // レースコンディションを避けるために、インターフェースの型セットは、インターフェースの並行使用前にCompleteを明示的に呼び出すことで計算する必要があります。 33 func NewInterfaceType(methods []*Func, embeddeds []Type) *Interface 34 35 // MarkImplicitは、interface tを暗黙的にマークします。 36 // これは、明示的なinterfaceの埋め込みなしに、~TやA|Bなどの制約リテラルに対応することを意味します。 37 // MarkImplicitは、暗黙のinterfaceを同時使用する前に呼び出す必要があります。 38 func (t *Interface) MarkImplicit() 39 40 // NumExplicitMethods はインターフェース t の明示的に宣言されたメソッドの数を返します。 41 func (t *Interface) NumExplicitMethods() int 42 43 // ExplicitMethodは0 <= i < t.NumExplicitMethods()に対して、インターフェースtのi番目に明示的に宣言されたメソッドを返します。 44 // メソッドは一意の [Id] によって順序付けられます。 45 func (t *Interface) ExplicitMethod(i int) *Func 46 47 // NumEmbeddeds はインターフェース t 内の埋め込まれた型の数を返します。 48 func (t *Interface) NumEmbeddeds() int 49 50 // Embeddedは、0 <= i < t.NumEmbeddeds() の範囲でインターフェースtのi番目の埋め込まれた(*[Named])型を返します。 51 // i番目の埋め込まれた型が定義済みの型でない場合、結果はnilです。 52 // 53 // Deprecated: 定義済みの(*[Named])型に制限されない [Interface.EmbeddedType] を使用してください。 54 func (t *Interface) Embedded(i int) *Named 55 56 // EmbeddedTypeは0 <= i < t.NumEmbeddeds()におけるインターフェースtのi番目の埋め込まれた型を返します。 57 func (t *Interface) EmbeddedType(i int) Type 58 59 // NumMethodsはインターフェースtのメソッドの合計数を返します。 60 func (t *Interface) NumMethods() int 61 62 // メソッドは、0 <= i < t.NumMethods() を満たす i の場合に、 63 // インターフェース t の i 番目のメソッドを返します。 64 // メソッドはそのユニークな ID によって順序づけされます。 65 func (t *Interface) Method(i int) *Func 66 67 // Emptyはtが空のインターフェースであるかどうかを報告します。 68 func (t *Interface) Empty() bool 69 70 // IsComparableはインターフェースtの型セットの各タイプが比較可能かどうかを報告します。 71 func (t *Interface) IsComparable() bool 72 73 // IsMethodSetは、インタフェースtがそのメソッドセットによって完全に記述されているかどうかを報告します。 74 func (t *Interface) IsMethodSet() bool 75 76 // IsImplicitは、インターフェースtが型セットリテラルのラッパーであるかどうかを報告します。 77 func (t *Interface) IsImplicit() bool 78 79 // Completeはインターフェースのタイプセットを計算します。これは、 80 // [NewInterfaceType] と [NewInterface] のユーザーによって呼び出される必要があります。インターフェースの埋め込まれた型が完全に定義され、他の型を形成する以外の方法でインターフェースのタイプを使用する前に呼び出す必要があります。インターフェースに重複するメソッドが含まれている場合、パニックが発生します。Completeはレシーバーを返します。 81 // 82 // 完了済みのインターフェース型は、同時に使用することが安全です。 83 func (t *Interface) Complete() *Interface 84 85 func (t *Interface) Underlying() Type 86 func (t *Interface) String() string