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