Операторы + = / * = / etc для типов AnyVal (Int, Double и т.д ...) в Scala - PullRequest
3 голосов
/ 12 ноября 2009

Где именно объявлены методы * = / + = / etc для подклассов AnyVal? Я предполагаю, что для этих типов сделано что-то особенное, потому что как val они недопустимы, но как var они хороши Это просто еще больше синтетического сахара? Я предполагаю, что это превращается

a *= 5

в

a = a * 5

, что явно не для val. Правильна ли эта интуиция? Я также предполагаю, что это только пытается это для AnyVals?

Спасибо:)

Ответы [ 2 ]

9 голосов
/ 12 ноября 2009

Ваша интуиция верна. Для любого класса, а не только подклассов AnyVal, если метод назначения не существует, тогда a OP= b превращается в a = a OP b. Имейте в виду, OP, в этом случае, должны быть не буквенно-цифровыми символами.

Это описано в Справочнике Scala (спецификация Scala), раздел 6.12.4.

0 голосов
/ 31 августа 2011

Короткая игра Foo:

class Foo (val v: String, val n: String) {
  override def toString : String = v + " : " + n
  def #: (i: Int) : Foo = {
    new Foo (v.substring (i), n.substring (i)) }}

var foo = new Foo ("Martin", "Odersky") 

scala> foo #:= 2
scala> foo
res30: Foo = rtin : ersky

scala> foo #:= 2
scala> foo      
res32: Foo = in : sky

scala> foo #:= 2
scala> foo      
res34: Foo =  : y
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...