定義済みインターフェイスを使用した再帰型制約の定義
Go2 ジェネリックスでは、インターフェイスを使用してジェネリック型の型制約を指定できます。ただし、現在のドラフトでは、ジェネリック型自体の引数を使用してメソッドの実装を強制する方法は提供されていません。
この制限を克服するには、次のアプローチを検討してください。
再帰インターフェイスの定義:
type Lesser[T any] interface { Less(T) bool }
ジェネリック型パラメーターを使用した関数の定義再帰インターフェイスによる制約:
func IsLess[T Lesser[T]](x, y T) bool { return x.Less(y) }
使用法:
type Apple int func (a Apple) Less(other Apple) bool { return a < other } type Orange int func (o Orange) Less(other Orange) bool { return o < other } func main() { fmt.Println(IsLess(Apple(10), Apple(20))) // true fmt.Println(IsLess(Orange(30), Orange(15))) // false }
説明:
型制約 T Lesser[T] は、ジェネリック型 T が型 T の引数を持つ Less メソッド。これにより、再帰的な型制約が可能になります。
このアプローチにより、独自の Less メソッドを実装する Apple や Orange のようなカスタム型を定義できるようになり、再帰的な制約が満たされ、これらのカスタム型を使用した IsLess 関数。
以上がインターフェイスを使用して Go2 ジェネリックで再帰的な型制約を定義するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。