En programmation PHP, l'assertion de type est une technique courante utilisée pour déterminer le type d'une variable. Cependant, nous pouvons parfois rencontrer un problème : les assertions de type ne peuvent pas être utilisées sur les valeurs des paramètres de type. Cette question peut dérouter certains développeurs. Dans cet article, nous explorerons les causes de ce problème et proposerons quelques solutions. Que nous soyons développeurs débutants ou expérimentés, en comprenant et en résolvant ce problème, nous pouvons mieux comprendre et utiliser les assertions de type. Nous allons jeter un coup d'oeil!
Nous ne pouvons pas utiliser d'assertions de type sur des variables de type génériques. Cela semble étrange étant donné qu'il s'agit du comportement générique de la contrainte interface{}
允许的,但不受 interface{}
. Vous vous demandez s'il existe des solutions de contournement ?
// 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; }
Vous ne pouvez effectuer des assertions de type que sur les valeurs de l'interface. Par conséquent, vous devez d'abord convertir x
转换为有效的接口类型,在本例中为 any
/ interface{}
:
func isint[t any](x t) (ok bool) { _, ok = any(x).(int) // convert, then assert return }
Alors pourquoi cette compilation échoue ?
_, ok = x.(int) // ... cannot use type assertion on type parameter value ...
x
的类型 t
是一个类型参数,而不是一个接口。它仅受接口约束。 go(修订版 1.18
) La spécification du langage indique clairement que les paramètres de type ne sont pas autorisés dans les assertions de type :
Pour type d'interface mais pas expression de type x
Les paramètres et le type t
...符号 x.(t)
sont appelés assertions de type.
Également à partir du Tutoriel génériques, découvrez pourquoi les types de paramètres doivent être résolus au moment de la compilation :
Bien que les contraintes sur les paramètres de type représentent généralement un ensemble de Tapez, au moment de la compilation, le paramètre type représente un type unique – Le type fourni par le code appelant en tant que paramètre de type. si tapez Le type du paramètre n'est pas autorisé par les contraintes du paramètre type, Le code ne peut pas être compilé.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!