2015-12-16 2 views
1

Я новичок в Scala, и я блуждал, если есть возможность перегрузить Int плюс. только, например, скажем, что я хочу 1+2, чтобы вернуть 1*2. Могу ли я сделать что-то вроде этого?Перегрузка Scala- оператора для Int

+1

вы имеете в виду изменение поведения 'Int' или создавая свой собственный целочисленный класс, где '+', '-' и т. д. перегружены? – Simon

+0

изменение поведения Int, или, если это невозможно, сделать это в моем собственном классе – boaz

+0

Вам нужно будет создать свой собственный класс. Вы не можете изменить метод '' '' '' '' '' '' '. –

ответ

4

Вы не можете перегружать методы конечного класса, такие как Int. Вы можете только добавить новые (расширения) методы:

implicit class IntPlusPlus(private val a: Int) extends AnyVal { 
    def ++ (b: Int): Int = a * b 
} 

assert(2 ++ 3 == 6) 

Или, если вы хотите использовать + что-то другое, ввести другой тип:

class MyInt(val self: Int) extends Proxy { 
    def + (b: MyInt): MyInt = new MyInt(self * b.self) 
} 

assert(new MyInt(2) + new MyInt(3) == new MyInt(6)) 
+1

В чем причина использования 'extends AnyVal'? –

+2

Это называется классом значений и означает, что вы избежите накладных расходов на фактическое создание экземпляра, поэтому вы можете создавать методы расширения с очень низкой стоимостью работы –

+0

спасибо! отличный ответ :) – boaz

Смежные вопросы