ホームページ  >  記事  >  バックエンド開発  >  型をジェネリック型のインスタンス化として定義する

型をジェネリック型のインスタンス化として定義する

WBOY
WBOY転載
2024-02-10 12:50:08575ブラウズ

型をジェネリック型のインスタンス化として定義する

php エディター Xigua は今日、型をジェネリック型のインスタンス化として定義するという重要な概念を紹介します。プログラミングにおいて、ジェネリックは、特定の型を指定せずに一般的なコードを記述する柔軟な方法です。型をジェネリック型のインスタンス化として定義すると、使用時に特定の型を指定できるため、コードがより柔軟で再利用可能になります。次に、この概念を詳しく見て、PHP でジェネリックを実装する方法を見てみましょう。

質問の内容

次の例では、インスタンス化されたジェネリック型の使用を簡素化するために PreciseAdder 型を定義しようとします。 残念ながら、go コンパイラは、ジェネリック型で定義されたメソッドは PreciseAdder 型には適用できないと考えているようです。合成を通じてこの問題を解決できることはわかっていますが、型定義を通じてこの問題を解決する方法はありますか? 解決できない場合、その理由は何ですか?

package main

type Addable interface {
    Add()
}

type Adder[T Addable] struct{}

func (a Adder[T]) DoAdd(){}

type PreciseAddable struct{}

func (p PreciseAddable)Add(){}

type PreciseAdder Adder[PreciseAddable]

func main() {
    var p PreciseAdder
    p.DoAdd()
}

解決策

これ:

リーリー

型宣言、より具体的には 型定義です。新しい型を作成し、すべてのメソッドを削除します。

代わりに、すべてのメソッドを保持する 型エイリアス を使用します。これは、同じ型を参照するための新しい識別子を導入するだけです:

リーリー

(識別子とタイプの間にある = 記号に注意してください。)

以上が型をジェネリック型のインスタンス化として定義するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。