Почему Ruby допускает только перегрузку некоторых операторов - PullRequest
8 голосов
/ 18 сентября 2008

В Ruby, как и во многих других языках программирования ОО, операторы перегружены. Однако только определенные символьные операторы могут быть перегружены.

Этот список может быть неполным, но вот некоторые из операторов, которые не могут быть перегружены:

!, not, &&, and, ||, or

Ответы [ 5 ]

12 голосов
/ 18 сентября 2008

Да. Операторы не перегружаются. Только методы.

Некоторые операторы не совсем. Они сахар для методов. Таким образом, 5 + 5 действительно 5.+(5), а foo[bar] = baz действительно foo.[]=(bar, baz).

11 голосов
/ 18 сентября 2008

Методы перегружены, они являются частью синтаксиса языка.

6 голосов
/ 21 сентября 2008

В Ruby 1.9 оператор ! на самом деле также является методом и может быть переопределен. Это оставляет только && и || и их аналоги с низким приоритетом and и or.

Есть также некоторые другие «комбинированные операторы», которые нельзя переопределить, например, a != b на самом деле !(a == b) и a += b на самом деле a = a+b.

1 голос
/ 19 сентября 2008

И давайте не будем забывать о << например:

string = "test"
string << "ing"

- это то же самое, что звонить:

string.<<("ing")
...