2013-11-21 4 views
1

Возможно ли переопределить ключевые слова, такие как and в рубине? У меня есть DSL такой код:Ruby redefine "и" ключевое слово в классе?

rule condition and another_condition do 
    do_something 
end 

Я хотел and просто еще один метод рубин в моем классе так же, как и conditionanother_condition. Это возможно?

+0

IMHO redefining Ruby keywords - очень плохая идея ... – spickermann

+0

Только что обнаружил, что это невозможно. См. Мой ответ ниже. – Stratus3D

+2

Чтобы переопределить ключевое слово, вам придется изменить базовый код C и перекомпилировать, после чего он разбился из-за многочисленных ошибок, которые вы бы ввели. Другими словами, забудьте об этом. –

ответ

1

Ключевые слова, подобные and, и or не могут быть перегружены (переопределены).

Эта статья объясняет перегружать оператор и определяет то, что операторы не могут быть переопределены:

http://strugglingwithruby.blogspot.com/2010/04/operator-overloading.html

В конце статьи говорится:

You cannot override keywords, such as "or", nor can you override: 
&& & || |() {} :: . ~ .. ... 

Update

Как Йорг W Миттаг отметил, что это неправильно. and, or, && и || являются единственными операторами, которые нельзя переопределить. not может быть переопределен через !.

+0

Не могли бы вы скопировать вставку соответствующих частей из источника, чтобы найти полный ответ здесь? Как только ссылка гниет (что происходит скорее раньше, чем позже) пользователи с тем же вопросом не получают полного ответа. – tessi

+0

@tessi Я обновил свой ответ с соответствующей информацией. – Stratus3D

+1

Это неправильно. Вы * можете * переопределять '&', '|' и '~'. Вы также можете переопределить '.()' (Он переводится в вызов '.call()'). Вы можете переопределить 'not', а точнее, вы можете переопределить'! ', Который также изменит поведение' not'. И нет фундаментальной причины, по которой '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'нельзя отменять, –

0

Не поддерживается языком.

Но вы всегда можете попробовать utils как this один.

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