Table des matières
Contenu de la question
Solution de contournement
Maison développement back-end Golang Comment définir des contraintes de type pour n'importe quel type de canal

Comment définir des contraintes de type pour n'importe quel type de canal

Feb 13, 2024 am 09:40 AM
可迭代对象

Comment définir des contraintes de type pour nimporte 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 
}
Copier après la connexion

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 caplen 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
}
Copier après la connexion

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)
}
Copier après la connexion

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
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

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 !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Comment vérifier si un objet est itérable en Python ? Comment vérifier si un objet est itérable en Python ? Aug 25, 2023 pm 10:05 PM

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

Java Iterator vs Iterable : démystifier le monde des itérateurs et des objets itérables Java Iterator vs Iterable : démystifier le monde des itérateurs et des objets itérables Feb 19, 2024 pm 02:15 PM

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 L'expression lambda sort de la boucle Feb 20, 2024 am 08:47 AM

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,

Comment ajouter des éléments à un tableau en python Comment ajouter des éléments à un tableau en python May 05, 2024 pm 08:21 PM

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).

Comment convertir une chaîne en tableau en js Comment convertir une chaîne en tableau en js May 06, 2024 am 11:24 AM

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.

Expressions Python Lambda : faciliter la programmation Expressions Python Lambda : faciliter la programmation Feb 19, 2024 pm 09:54 PM

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 Comment utiliser la fonction items() en Python Feb 23, 2024 am 09:03 AM

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

Quelle est la méthode pour additionner des tableaux en python Quelle est la méthode pour additionner des tableaux en python Mar 01, 2024 pm 05:20 PM

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```

See all articles