2010-10-12 11 views
16

puisque les opérateurs normaux comme +, ::, -> et ainsi de suite sont toutes des méthodes qui peuvent être surchargées et je me demandais si || et & & sont également des méthodes. Cela pourrait théoriquement fonctionner s'il s'agissait de méthodes dans l'objet booléen. Mais si elles sont, pourquoi est quelque chose comme&& et || dans Scala

if (foo == bar && buz == fol) 

possible? Si le compilateur lit de droite à gauche ce invoquerait & & sur la barre au lieu de (toto ==)

+0

'==' a évidemment une priorité supérieure à '&&'. –

+0

comment définit-on alors la préséance? est-ce seulement dans le compilateur ou existe-t-il des règles sur lesquelles les opérateurs sont invoqués en premier – mice

+0

Le compilateur détermine cela. –

Répondre

28

6.12.3 Opérations infixes Un opérateur infixe peut être un identifiant arbitraire. les opérateurs infixes ont priorité et l'associativité définis comme suit:

La priorité d'un opérateur infixe est déterminé par le premier caractère de l'opérateur . Les caractères sont énumérés ci-dessous dans l'ordre croissant de précédence, avec des caractères sur le même ligne ayant la même précédence.

  • (toutes les lettres)
  • |
  • ^
  • &
  • <>
  • =!
  • :
  • + -
  • * /%
  • (tous les autres caractères spéciaux)

C'est, les opérateurs commençant par une lettre ont la priorité la plus basse, suivi par les opérateurs à partir '|', etc. 10 cette règle, qui concerne l'affectation opérateurs (§6.12.4). La précédence de un opérateur d'assigment est la même que celle de l'affectation simple (=). Ce est, il est inférieur à la précédence de tout autre opérateur.

Il suit avec une explication de l'associativité, et comment tout se combine dans une expression avec plusieurs opérateurs. Le Scala Reference fait une bonne lecture.

0

Ces deux sont définitivement des méthodes en scala.