C++ hérite true blue opérateurs de C. je veux dire Par là que le "+" en 6 + 4 est très spécial. Vous ne pouvez pas, par exemple, d'avoir un pointeur vers cette fonction.
Scala en revanche ne pas avoir opérateurs de cette façon. Il a juste une grande flexibilité dans la définition des noms de méthode, plus un peu de construit dans l'ordre de priorité pour les non-mot symboles. Donc, techniquement, Scala n'a pas la surcharge d'opérateur.
Tout ce que vous voulez l'appeler, la surcharge d'opérateur n'est pas mauvais en soi, même en C++. Le problème est quand les mauvais programmeurs en abuser. Mais franchement, je suis d'avis que la prise de distance des programmeurs capacité de l'abus de la surcharge d'opérateur ne prend pas en mettre une goutte dans le seau de la fixation de toutes les choses que les programmeurs peuvent les abus. La vraie réponse est de mentorat. http://james-iry.blogspot.com/2009/03/operator-overloading-ad-absurdum.html
Néanmoins, il existe des différences entre le C++de la surcharge d'opérateur et de la Scala, à la méthode flexible de nommage qui, à mon humble avis, faire de la Scala à la fois moins toxicomanogènes et plus toxicomanogènes.
En C++, la seule manière d'aller au-fix de la notation est de l'utilisation des opérateurs. Sinon, vous devez utiliser l'objet.message(argument) ou un pointeur->message vocal(argument) ou la fonction(argument1, argument2). Donc, si vous voulez un certain DSLish style à votre code puis, il y a de la pression à utiliser des opérateurs.
En Scala, vous pouvez obtenir la notation infixe avec n'importe quel message envoyer. "l'objet du message, l'argument est parfaitement ok, ce qui signifie que vous n'avez pas besoin d'utiliser des symboles verbaux juste pour obtenir la notation infixe.
C++ surcharge d'opérateur est limitée essentiellement à la C les opérateurs. Combiné avec la limitation que seuls les opérateurs peuvent être utilisés infix qui met la pression sur les gens pour essayer de la carte un large éventail de sans rapport avec les concepts sur un nombre relativement restreint de symboles "+" et ">>"
Scala permet une vaste gamme de validité de la non-parole des symboles comme des noms de méthode. Par exemple, j'ai intégré Prolog-ish LIS où vous pouvez écrire
female('jane)! // jane is female
parent('jane,'john)! // jane is john's parent
parent('jane, 'wendy)! // jane is wendy's parent
mother('Mother, 'Child) :- parent('Mother, 'Child) & female('Mother) //'// a mother of a child is the child's parent and is female
mother('X, 'john)? // find john's mother
mother('jane, 'X)? // find's all of jane's children
L' :-, !, ?, et et symboles sont définis comme les méthodes ordinaires. En C++ seulement et serait valide donc une tentative de carte ce LIS en C++ aurait besoin d'un peu de symboles déjà évoquer des concepts très différents.
Bien sûr, cela ouvre également la Scala à un autre type d'abus. En Scala, vous pouvez nommer une méthode $!&^% si vous le souhaitez.
Pour d'autres langues, comme Scala, sont flexibles dans l'utilisation de la non-parole de la fonction et de la méthode des noms de voir Smalltalk où, comme Scala, tous les "opérateur" est juste une autre méthode et Haskell qui permet au programmeur de définir la priorité et la fixité de manière flexible des fonctions nommées.