


Comment définir des contraintes de type pour n'importe quel type de canal
Les contraintes de type en PHP sont une fonctionnalité puissante qui nous permet de définir les types de paramètres acceptés dans les paramètres d'une fonction ou d'une méthode. Non seulement limité aux types de données de base, PHP nous permet également de définir des contraintes de type pour les classes personnalisées, les interfaces, les tableaux et les objets itérables. Dans cet article, nous allons vous présenter comment définir des contraintes de type pour tout type de canal afin de mieux contrôler et protéger notre code. Que vous soyez débutant ou développeur expérimenté, ces conseils vous aideront à rendre votre code plus lisible et maintenable.
Contenu de la question
J'essaie de définir une fonction qui renvoie le pourcentage d'utilisation d'un canal donné :
func ChannelUsagePct[T any](channel chan T) int { channelCap := cap(channel) channelLen := len(channel) if channelCap == 0 { // Unbuffered channel return 0 } return 100 * channelLen / channelCap } func main() { twoWayChannel := make(chan int, 10) var sendOnlyChannel chan<- int = twoWayChannel var recvOnlyChannel <-chan int = twoWayChannel fmt.Println(ChannelUsagePct(twoWayChannel)) fmt.Println(ChannelUsagePct(sendOnlyChannel)) // Does not work fmt.Println(ChannelUsagePct(recvOnlyChannel)) // Does not work }
Maintenant, le problème est que sans changer la signature func, cela fonctionne pour le premier canal mais pas pour le deuxième et le troisième. Mais si je change la signature, je dois choisir le canal pour recevoir uniquement ou envoyer uniquement. Existe-t-il un moyen de définir un canal à chemin nul ? Par exemple. Je ne sais ni lire ni écrire, je veux juste utiliser la fonction cap
和 len
dessus.
Idéalement, channelusagepct
devrait fonctionner dans l’une de ces 3 situations.
Solution de contournement
Pour autoriser les trois formes possibles de canaux, des contraintes de type distinctes doivent être définies.
type chan[t any] interface { chan t | <-chan t | chan<- t }
Cela nécessite d'instancier la contrainte de type avec t
lors de son utilisation, ce qui peut être fait en utilisant un autre paramètre de type :
func cap[t any, c chan[t]](c c) int { return cap(c) }
En raison de l'instanciation, le type entier ne peut pas être déduit, mais seul le type d'élément de canal doit être fourni :
ch := make(chan int, 3) i := Cap[int](ch) fmt.Println(i) // 3
https://www.php.cn/link/ca279b8542ab30bd43469423ce703e66
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Un objet itérable est un objet dont tous les éléments peuvent être itérés à l'aide d'une boucle ou d'une fonction itérable. Les listes, chaînes, dictionnaires, tuples, etc. sont tous appelés objets itérables. En langage Python, il existe différentes manières de vérifier si un objet est itérable. Jetons un coup d'œil un par un. Utilisation des boucles En Python, nous avons deux techniques de bouclage, l'une utilise la boucle "for" et l'autre utilise la boucle "while". En utilisant l'une ou l'autre de ces deux boucles, nous pouvons vérifier si un objet donné est itérable. Exemple Dans cet exemple, nous allons essayer d'itérer un objet en utilisant la boucle "for" et vérifier s'il est itéré ou non. Ci-dessous le code. l=["pomme",22,"orange

En programmation Java, les interfaces Iterator et Iterable sont des outils importants pour traiter les éléments des collections. L'interface Iterator fournit des méthodes d'accès itératif aux éléments de la collection, tandis que l'interface Iterable définit l'itération de la collection afin que les éléments de la collection soient accessibles via Iterator. L'étroite coopération entre les deux nous fournit une méthode générale pour parcourir les éléments de la collection. Interface Iterator L'interface Iterator définit les méthodes suivantes : booleanhasNext() : Vérifiez s'il y a encore des éléments dans la collection. Enext() : renvoie l'élément suivant de la collection. voidremove() : supprime l'élément actuel. Itérable

L'expression Lambda sort de la boucle, des exemples de code spécifiques sont nécessaires en programmation, la structure de boucle est une syntaxe importante qui est souvent utilisée. Cependant, dans certaines circonstances, nous pouvons vouloir sortir de la boucle entière lorsqu'une certaine condition est remplie dans le corps de la boucle, plutôt que de simplement terminer l'itération en cours de la boucle. À l'heure actuelle, les caractéristiques des expressions lambda peuvent nous aider à atteindre l'objectif de sortir de la boucle. L'expression Lambda est un moyen de déclarer une fonction anonyme, qui peut définir une logique de fonction simple en interne. C'est différent d'une déclaration de fonction ordinaire,

En Python, il existe quatre façons d'ajouter des éléments à une liste : utilisez la méthode append() pour ajouter à la fin ; utilisez la méthode extend() pour ajouter des éléments d'un autre objet itérable ; utilisez la méthode insert() pour insérer à un emplacement ; position spécifiée ; utiliser l'indexation. Attribue une valeur (mais lève une exception si l'index est hors plage).

En JavaScript, vous pouvez convertir une chaîne en tableau en utilisant les méthodes suivantes : extraire chaque élément à l'aide de l'opérateur spread ; convertir directement à l'aide de la méthode Array.from() ; diviser par délimiteur à l'aide de la méthode split() ; méthode Expression régulière pour faire correspondre les mots alphabétiques.

Une expression Python Lambda est une petite fonction anonyme qui stocke une expression dans une variable et renvoie sa valeur. Les expressions Lambda sont souvent utilisées pour effectuer des tâches simples pouvant être accomplies en écrivant une fonction distincte, mais les expressions Lambda peuvent rendre le code plus concis et plus lisible. La syntaxe d'une expression Lambda est la suivante : lambdaarguments : expressionarguments est la liste de paramètres reçue par l'expression Lambda, et expression est le corps de l'expression Lambda, qui contient le code qui doit être exécuté. Par exemple, l'expression Lambda suivante ajoute deux nombres et renvoie leur somme : lambdax,

Comment utiliser la fonction items() en Python Le type dictionnaire (dict) en Python a une fonction intégrée très utile : items(). La fonction items() est utilisée pour renvoyer toutes les paires clé-valeur du dictionnaire et les convertir en un objet itérable. La syntaxe de base de la fonction items() est la suivante :dictionary.items() Utilisez la fonction items() pour parcourir toutes les paires clé-valeur du dictionnaire. L'utilisation spécifique est la suivante : #Créer un

En Python, vous pouvez utiliser la fonction intégrée « sum() » pour additionner un tableau. Cette fonction accepte un objet itérable comme argument et renvoie la somme de ses éléments. Exemple : ```Pythonarr=[1,2,3,4,5]total=sum(arr)print(total)#Sortie : 15```
