Почему Ruby допускает только определенную перегрузку операторов

StackOverflow https://stackoverflow.com/questions/92862

Вопрос

В 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")
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top