Я новичок в Scala, и я блуждал, если есть возможность перегрузить Int
плюс. только, например, скажем, что я хочу 1+2
, чтобы вернуть 1*2
. Могу ли я сделать что-то вроде этого?Перегрузка Scala- оператора для Int
ответ
Вы не можете перегружать методы конечного класса, такие как 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))
В чем причина использования 'extends AnyVal'? –
Это называется классом значений и означает, что вы избежите накладных расходов на фактическое создание экземпляра, поэтому вы можете создавать методы расширения с очень низкой стоимостью работы –
спасибо! отличный ответ :) – boaz
- 1. Scala: метод \ перегрузка оператора
- 2. Перегрузка оператора (int as bool)
- 3. Перегрузка оператора для класса типа Int
- 4. Перегрузка оператора для оператора []
- 5. Перегрузка оператора Scala с несколькими параметрами
- 6. Перегрузка оператора = для класса
- 7. Перегрузка оператора C++ для оператора + и оператора =
- 8. Перегрузка оператора на основе переданного int?
- 9. Перегрузка оператора + =
- 10. Перегрузка оператора '-'
- 11. Перегрузка оператора()
- 12. Перегрузка оператора
- 13. Перегрузка оператора + =
- 14. Перегрузка оператора - перегрузка *
- 15. Перегрузка оператора
- 16. Перегрузка оператора (==)
- 17. «неоднозначная перегрузка для» оператора [] '", если оператор преобразования для int существует
- 18. Перегрузка оператора для типа
- 19. Перегрузка оператора для манипуляторов
- 20. перегрузка оператора()
- 21. Как работает перегрузка оператора для оператора присваивания?
- 22. Перегрузка оператора
- 23. Перегрузка оператора ++ для увеличения итератора
- 24. Перегрузка оператора для производных классов
- 25. Перегрузка оператора + для добавления массивов
- 26. ошибка: неоднозначная перегрузка для 'оператора =='
- 27. Перегрузка оператора = для нулевых типов?
- 28. Перегрузка оператора
- 29. Перегрузка оператора +
- 30. Перегрузка выхода оператора для массивов
вы имеете в виду изменение поведения 'Int' или создавая свой собственный целочисленный класс, где '+', '-' и т. д. перегружены? – Simon
изменение поведения Int, или, если это невозможно, сделать это в моем собственном классе – boaz
Вам нужно будет создать свой собственный класс. Вы не можете изменить метод '' '' '' '' '' '' '. –