Je sais que vous pouvez surcharger un opérateur existant. Je veux savoir s'il est possible de créer un nouvel opérateur. Voici mon scénario.
Je veux ça :
var x = (y < z) ? y : z;
Pour être équivalent à ceci :
var x = y <? z;
En d'autres termes, je voudrais créer ma propre <?
opérateur.
0 votes
Aucune langue n'a cette capacité...
11 votes
@JesonPark - C'est faux. F# l'a comme d'autres l'ont souligné, et Le C++ l'a aussi. CoffeeScript offre plusieurs nouveaux opérateurs comme sucre syntaxique pour les idiomes JavaScript, et il est tellement personnalisable que vous pourriez le décrire comme autorisant les opérateurs personnalisés. Le dernier point est un peu délicat, car il s'agirait techniquement d'une extension du langage.
0 votes
@JustinMorgan : comme mentionné dans l'article de CodeProject "C++ supporte la surcharge des opérateurs, mais vous n'êtes pas autorisé à créer vos propres opérateurs". c'est de l'émulation !
0 votes
@JesonPark - Je ne vois pas l'article dont vous parlez, mais l' exemple de la réponse de Cogwheel (sur la question SO dont j'ai fait le lien) donne un code qui fonctionne exactement comme les opérateurs personnalisés. Qu'ils soient ou non intégrés au langage, vous pouvez les faire fonctionner. Quoi qu'il en soit, votre affirmation (qu'aucun langage ne possède cette capacité) n'est pas valable pour F#.
0 votes
@JesonPark En Scala ce serait
implicit class <?(y: Int) { def <?(z: Int) = y min z }
-- la classe implicite à laquelle ajouter une méthodeInt
et ensuite la méthode elle-même. Ce site Cette méthode ne fonctionnerait pas car<?
est un mot-clé xml-start.0 votes
@JustinMorgan Je parle de Cet article
1 votes
Même si c'était possible, je ne pense toujours pas que ce soit une bonne idée. C'est beaucoup moins lisible qu'une méthode, par exemple
Min(y, z)
.0 votes
Haskell possède des opérateurs entièrement définis par l'utilisateur (AFAIK).
0 votes
Opérateurs surchargeables (Guide de programmation C#)
0 votes
J'aimerais aussi faire ça. Que diriez-vous d'un opérateur pour assigner
b
aa
mais seulement lorsquea
est déjà dépourvu d'une valeur, par exemplea ??= b;
On ne peut pas le faire de manière aussi élégante avec une méthode.0 votes
Ruby a quelques astuces qui vous permettent de le faire : stackoverflow.com/questions/11874579/
1 votes
@userSteve Ceci a été proposé pour C# 8 - affectation de coalescence nulle