記事の内容に適した質問ベースのタイトルをいくつか示します。 * Go 1.18 ジェネリックで制約された型を関数の引数として使用する方法: これは、次の点を強調する直接的で有益なタイトルです。

Susan Sarandon
リリース: 2024-10-28 09:57:29
オリジナル
236 人が閲覧しました

Here are a few question-based titles that fit the article's content:

* How to Use Constrained Types as Function Arguments in Go 1.18 Generics:  This is a direct and informative title highlighting the core issue and solution.
* Go 1.18 Generics:  Why Can

Go 1.18 ジェネリクスの関数引数としての制約型

Go 1.18 のジェネリックスは強力な型制約を提供し、開発者はカスタム型を定義できます。特定の行動。ただし、これらの制約された型を具体的な型を期待する関数の引数として使用すると、コンパイル エラーが発生する可能性があります。

問題:

ヒトカゲの構造体が定義されている例を考えてみましょう。型パラメーター F を持つジェネリック型として。InflictDamage メソッドを使用してダメージを与えるためにヒトカゲの攻撃力を使用しようとすると、コンパイラによってエラーが発生します。

エラー メッセージ:

cannot use c.AttackPower (variable of type float64 constrained by Float) as float64 value in argument to other.ReceiveDamage compiler(IncompatibleAssign)
ログイン後にコピー

このエラーは、InflictDamage メソッドが float64 引数を予期しているにもかかわらず、 AttackPower 変数が制約された型 F であるために発生します。

解決策:

このエラーを解決するには、型変換を使用する必要があります。制約付き型 F は、改訂されたコードに示すように、その値を明示的にキャストすることで float64 に変換できます。

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

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

float64 は、float32 と float64 の両方と互換性があるため、これらの変換は有効です。型パラメータ F。F が float32 でインスタンス化されている場合、F を float64 に明示的にキャストすると精度が失われる可能性があることに注意することが重要です。

以上が記事の内容に適した質問ベースのタイトルをいくつか示します。 * Go 1.18 ジェネリックで制約された型を関数の引数として使用する方法: これは、次の点を強調する直接的で有益なタイトルです。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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