Vous pouvez définir un opérateur spécial d'affectation (il doit se terminer par deux points comme il doit être associative droite) pour vos propres types, ou écrire un emballage générique (y compris IMPLIT conversions) pour les types généraux. Je recommande de ne pas utiliser réellement, mais voilà:
case class M[T](var t:T) {
def =: (m: M[T]):M[T] = {m.t = t ; this}
}
implicit def anyToM[T](v:T) = M(v)
implicit def mToAny[T](m:M[T]) = m.t
def main(args: Array[String]) {
var a = M(0)
var b = M(0)
var c = M(0)
a =: b =: c =: 100
println(a + b + c) //--> 300
}
Je pense qu'il est toujours une mauvaise idée d'appeler Magick lourde afin de sauver quelques frappes. En Allemagne, nous appelons cela « pour tirer des moineaux avec un canon » ...
Pourquoi demander pourquoi? Parce que je trouve que ça n'a pas de sens. Java l'a, Ruby l'a, pourquoi Scala le rend différent? –
Parce que Scala ne veut pas être ces langues. C'est la même raison pour laquelle Scala n'a pas de déclaration de rupture; pour vous encourager à laisser le bagage impératif que vous avez apporté de Java et Ruby à la porte. –
Weeeelllll, je déteste parler, mais Scala a une déclaration de rupture de nos jours (depuis 2.8). Mais vous devez l'importer (importer scala.util.control.Breaks._) donc je suppose que personne ne l'utilisera jamais, et c'est probablement exactement ce qui était prévu :-) –