Go 関数の引数として制約付き型を使用する場合の型エラーを解決するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-10-27 02:43:03
オリジナル
160 人が閲覧しました

How to Resolve Type Errors When Using Constrained Types as Arguments in Go Functions?

関数の引数として制約された型を使用する

Go 1.18 では、ジェネリックは、特定の型に制約された型パラメーターを使用して型を定義する方法を提供します。セット。ただし、具体的な型を期待する関数の引数として制約された型を使用すると、エラーが発生する可能性があります。型変換を使用した解決策を見てみましょう。

次の例を考えてみましょう。

<code class="go">type Pokemon interface {
    ReceiveDamage(float64)
    InflictDamage(Pokemon)
}

type Float interface {
    float32 | float64
}

type Charmander[F Float] struct {
    Health      F
    AttackPower F
}

func (c *Charmander[float64]) ReceiveDamage(damage float64) {
    c.Health -= damage
}

func (c *Charmander[float64]) InflictDamage(other Pokemon) {
    other.ReceiveDamage(c.AttackPower)
}</code>
ログイン後にコピー

このプログラムをコンパイルしようとすると、c. AttackPower が F 型であるため、エラーが発生します。 float64 に制約されていますが、other.ReceiveDamage() は float64 引数を予期しています。

この問題を解決するには、c. AttackPower を Float を満たす具象型に明示的に変換する必要があります。この場合、float32 と float64 の両方が制約を満たすため、どちらかに変換できます。

更新されたメソッドは次のようになります。

<code class="go">func (c *Charmander[T]) ReceiveDamage(damage float64) {
    c.Health -= T(damage)
}

func (c *Charmander[T]) InflictDamage(other Pokemon) {
    other.ReceiveDamage(float64(c.AttackPower))
}</code>
ログイン後にコピー

これらの変換により、プログラムは正常にコンパイルされます。ヒトカゲ型をインスタンス化するときは、*Charmander[float64] など、F がバインドされる具体的な型を指定する必要があることに注意してください。

以上がGo 関数の引数として制約付き型を使用する場合の型エラーを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!