2010-07-26 2 views
24

Есть ли список из всех рубиновых операторов, которые можно переопределить? (Не те, которые не могут!)Список операторов ruby, которые могут быть переопределены/реализованы

+0

** Перегрузка ** - это использование одного и того же имени метода для разных действий, где метод можно различить только по его подписи. На самом деле это невозможно в Ruby. Переопределение или переопределение - это правильный термин здесь. –

+0

Спасибо за детали, @platzhirsch. Я отредактировал вопрос. Странно, как это обычно называется перегрузкой оператора, а? – aaaidan

+0

Ну, один, как и я, всегда может быть разборчивым в отношении использования терминов и их значения :-) В конце концов, он происходит от таких языков, как C++, где он, возможно, делает то же самое, но основан на различной семантике. –

ответ

31

Вот a table of the Ruby operators.

Те, которые являются методами и Перегружаемым являются:

[ ] [ ]= Element reference, element set 
** Exponentiation 
! ~ + -  Not, complement, unary plus and minus (method names for the last two are [email protected] and [email protected]) 
*/% Multiply, divide, and modulo 
+ -  Plus and minus 
>> << Right and left shift 
& Bitwise `and' 
^ |  Bitwise exclusive `or' and regular `or' 
<= < > >= Comparison operators 
<=> == === != =~ !~  Equality and pattern match operators (!= and !~ may not be defined as methods) 

Стола был от кирки книги 2001 года, но это та же таблица, как и в книге Ruby 1.9 кирки - нет оснований полагать, что этот набор из инфиксных операторов будет когда-либо изменяться.

+0

«Те, которые являются методами и перегружаемыми», я предполагаю, что вы имеете в виду, что можно перегружать только операторы, которые являются методами, нет? Кроме того, в то время как «чистые» операторы не могут быть перегружены, можно злоупотреблять более текстовыми словами (например, 'defined?', 'Not',' or', 'begin') в качестве имен для новых методов без какой-либо доскональности. – fny

+1

Собственно,! = И! ~ Может быть перегружен/определен, хотя старый кирка говорит, что вы не можете. Еще в 2008 году в списке рассылки появилась жалоба, и Мац отметил, что Ruby является гибким. –

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