Почему Ruby допускает только определенную перегрузку операторов
-
01-07-2019 - |
Вопрос
В Ruby, как и во многих других языках объектно-ориентированного программирования, операторы перегружаются.Однако перегружать можно только определенные символьные операторы.
Возможно, этот список неполон, но вот некоторые операторы, которые нельзя перегрузить:
!, not, &&, and, ||, or
Решение
Методы перегружаются, они являются частью синтаксиса языка.
Другие советы
Ага.Операторы не перегружены.Только методы.
Некоторые операторы на самом деле не такие.Они просто сахар для методов.Так 5 + 5
действительно 5.+(5)
, и foo[bar] = baz
действительно foo.[]=(bar, baz)
.
В Руби 1.9 !
Оператор на самом деле также является методом и может быть переопределен.Это оставляет только &&
и ||
и их аналоги с низким приоритетом and
и or
.
Существуют также некоторые другие «комбинированные операторы», которые нельзя переопределить, например. a != b
на самом деле !(a == b)
и a += b
на самом деле a = a+b
.
И давайте не будем забывать о <<
например:
string = "test"
string << "ing"
то же самое, что вызов:
string.<<("ing")