型パラメータ値に型アサーションを使用できません

PHPz
リリース: 2024-02-09 21:42:09
転載
622 人が閲覧しました

型パラメータ値に型アサーションを使用できません

PHP プログラミングでは、型アサーションは変数の型を決定するために使用される一般的な手法です。ただし、場合によっては、型パラメーター値に型アサーションを使用できないという問題が発生することがあります。この質問は一部の開発者を混乱させる可能性があります。この記事では、この問題の原因を調査し、いくつかの解決策を提供します。初心者でも経験豊富な開発者でも、この問題を理解して解決することで、型アサーションをよりよく理解し、使用できるようになります。見てみましょう!

質問内容

ジェネリック型変数には型アサーションを使用できません。これは、interface{} で許可されているが、interface{} によって制限されない一般的な動作であることを考えると、奇妙に思えます。何か回避策はないでしょうか?

// This works
func isInt(x interface{}) bool {
    _, ok := x.(int)
    return ok;
}

// Compile Error
// invalid operation: cannot use type assertion on type parameter 
// value x (variable of type T constrained by interface{})
func isInt2[T interface{}](x T) bool {
    _, ok := x.(int)
    return ok;
}
ログイン後にコピー

解決策

tl;医師

型アサーションはインターフェイス値に対してのみ実行できます。したがって、まず #xx を有効なインターフェイス タイプに変換する必要があります。この場合は any / interface{}: リーリー

それでは、なぜこの

コンパイルは失敗するのでしょうか リーリー

#xxx

t の型は型パラメータであり、インターフェイスではありません。それはインターフェースによってのみ制限されます。 go (リビジョン 1.18) 言語仕様では、type パラメータ type アサーション : に使用することは許可されていないと明確に述べています。

インターフェース型の式の場合 (型 x ではない) パラメータ と型 t...シンボル x.(t) は型アサーションと呼ばれます。

ジェネリクス チュートリアル

からも、コンパイル時にパラメーターの型を解決する必要がある理由を学習してください: 型パラメータの制約は通常、次のセットを表しますが、 型。コンパイル時に型パラメーターは

単一の型

を表します。 呼び出しコードによって型パラメータとして指定される型。タイプの場合 パラメータの型は型パラメータ制約によって許可されていません。 コードをコンパイルできません。

以上が型パラメータ値に型アサーションを使用できませんの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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