13 votes

Y a-t-il une raison objective pour laquelle je ne peux pas avoir un tuple à élément unique avec une étiquette d'élément ?

Dans Swift jusqu'à Swift 3 inclus, je ne peux pas créer un tuple à élément unique où l'élément est nommé. Ainsi, func foo() -> Bar est bien, alors que func foo() -> (bar: Bar) produit une erreur de compilation.

Je peux cependant penser à quelques utilisations possibles de ce modèle, par ex.

func putTaskOnQueue() -> (receipt: CancellableTask)

func updateMyThing() -> (updatedSuccessfully: Bool)

...où l'étiquette est utilisée pour réduire l'ambiguïté sur ce que représente la valeur de retour.

Il est évident qu'il existe plusieurs façons de reconfigurer mes apis pour contourner cette limitation, mais je suis curieux de savoir pourquoi elle existe.

S'agit-il d'une limitation du compilateur ? Le fait d'autoriser les étiquettes d'éléments sur les 1-tuples empêcherait-il l'analyse d'une autre partie de la grammaire ? Cela a-t-il été discuté dans le cadre du système Swift Evolution ?

Pour être clair : je ne sollicite pas d'avis quant à l'exactitude des exemples ci-dessus. Je cherche des explications (si elles existent) sur les raisons pour lesquelles ce n'est pas techniquement possible.

13voto

Rob Napier Points 92148

Oui, c'est dû aux limitations du compilateur. Il n'y a pas du tout de one-tuples en Swift. Chaque T est trivialement convertible en et de (T) . SE-110 y SE-111 devrait améliorer les choses, mais je ne suis pas sûr que ce soit suffisant pour rendre cela possible et je ne crois pas qu'aucune des propositions actuelles ne le permette explicitement.

Cela a été discuté sur le site swift-evolution. Ce n'est pas une caractéristique souhaitée de la langue ; c'est le résultat d'autres choix.

Le processus Swift Evolution est très ouvert. Je recommande vivement de poser des questions de ce type sur la liste (après avoir cherché dans les archives ; il est vrai que ce n'est pas aussi simple que vous le souhaiteriez). StackOverflow ne peut donner que des ouï-dire ; la liste est beaucoup plus définitive.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X