52 votes

Quelle est la différence entre = et := en Scala ?

Quelle est la différence entre = y := en Scala ?

J'ai beaucoup cherché sur Google "scala colon-equals", mais je n'ai rien trouvé de définitif.

89voto

Owen Points 14439

= en scala est l'opérateur d'assignation proprement dit - il fait une poignée de choses spécifiques sur lesquelles, pour la plupart, vous n'avez pas de contrôle, telles que

  • Donner un val o var une valeur lors de sa création
  • Modifier la valeur d'un var
  • Modification de la valeur d'un champ dans une classe
  • Créer un alias de type
  • Probablement d'autres

:= n'est pas un opérateur intégré -- n'importe qui peut le surcharger et lui donner la signification qu'il souhaite. La raison pour laquelle les gens aiment utiliser := c'est parce qu'il a l'air très assignable et qu'il est utilisé comme opérateur d'assignation dans d'autres langages.

Donc, si vous essayez de trouver ce que := signifie dans la bibliothèque particulière que vous utilisez... mon conseil est de chercher dans les Scaladocs (si elles existent) une méthode nommée := .

59voto

tolitius Points 9816

De Martin Odersky :

  • Au départ, nous avions deux-points équivaut à pour l'affectation - comme en Pascal, Modula et Ada - et un seul signe égal pour l'égalité. De nombreux théoriciens de la programmation soutiendraient que c'est la bonne façon de procéder. L'assignation n'est pas l'égalité, et vous devriez donc utiliser un symbole différent pour l'assignation. Mais j'ai ensuite essayé avec des personnes venant de Java. La réaction que j'ai eue a été la suivante : "Eh bien, cela semble être un langage intéressant. Mais pourquoi écrivez-vous deux-points équivaut à ? Qu'est-ce que c'est ?" Et j'ai expliqué que c'était comme ça dans Pascal. Ils ont dit : "Maintenant je comprends, mais je ne comprends pas pourquoi vous insistez pour faire ça." Puis j'ai réalisé que ce n'était pas quelque chose sur lequel nous voulions insister. Nous ne voulions pas dire : "Nous avons un meilleur langage parce que nous écrivons des deux-points au lieu d'égaux pour les affectations." C'est un point totalement mineur, et les gens peuvent s'habituer aux deux approches. Nous avons donc décidé de ne pas nous battre contre la convention sur ces points mineurs, alors qu'il y avait d'autres endroits où nous voulions faire la différence .

de Les objectifs de la conception de Scala

5voto

Rex Kerr Points 94401

= effectue une mission. := n'est pas défini dans la bibliothèque standard ou dans la spécification du langage. Il s'agit d'un nom qui est libre d'être utilisé par d'autres bibliothèques ou par votre code, si vous le souhaitez.

5voto

thomasrutter Points 42905

Scala permet de surcharger les opérateurs, c'est-à-dire de définir le comportement d'un opérateur de la même manière que vous écrivez une méthode.

Comme dans d'autres langues, = est un opérateur d'affectation.

Il n'existe pas, à ma connaissance, d'opérateur standard appelé := mais j'ai pu en définir un avec ce nom. Si vous voyez un opérateur comme celui-ci, vous devriez vérifier la documentation de ce que vous regardez, ou chercher où cet opérateur est défini.

Il y a beaucoup que vous pouvez faire avec les opérateurs Scala. Vous pouvez essentiellement créer un opérateur à partir de pratiquement tous les caractères que vous souhaitez.

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