ホームページ >バックエンド開発 >Golang >Golang で型パラメータをさらに制約する (Contains メソッドを使用して汎用 List を実装する)

Golang で型パラメータをさらに制約する (Contains メソッドを使用して汎用 List を実装する)

WBOY
WBOY転載
2024-02-06 08:15:04584ブラウズ

Golang で型パラメータをさらに制約する (Contains メソッドを使用して汎用 List を実装する)

質問の内容

次のようないくつかの便利なメソッドを含む一般的な list 型を作成するとします。

リーリー

ただし、リスト t の要素タイプをさらに制限する必要がある便利な方法は他にもあります。たとえば、この list 型には contains メソッドを実装できません:

リーリー

list を宣言した場合のみ、contains

を実装できます。 リーリー

しかし、これにより、比較できない型の list を作成することができなくなります。

両方の長所を活かす方法はありますか?つまり、比較不可能な型 t に使用可能な list[t] がありますが、t が比較可能な ## 場合、 contains を持つことが許可されます。 # 方法?

私が考えたのは:

    異なるタイプを使用します (例:
  • uncomparablelist/list または list/comparablelist)
  • にメソッドではなく関数として を含めるようにします
しかし、私はどれもあまり好きではありません。


正解


goには特殊化がないので、これと全く同じように動作させることはできないと思います(ジェネリックスの専門家ではありませんが)。

この問題を解決する合理的な方法は、明示的なコンパレータを渡すことだと思います。

リーリー

そうすれば、次のことができます

リーリー

同様のタイプの場合、デフォルト値を指定できます:

リーリー

したがって、上記は

になります リーリー

コンパレータを

list 型に埋め込んでデフォルト値 func(a, b t) bool { return false } を割り当てて、定義できるコンパレータを公開することもできます。コンパレーターが渡されるコンストラクター。しかし、これはあなたにとってわかりにくいかもしれません。

以上がGolang で型パラメータをさらに制約する (Contains メソッドを使用して汎用 List を実装する)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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