2013-11-21 29 views
1

是否有可能在ruby中重新定義關鍵字and?我有一些DSL這樣的代碼:Ruby在課堂上重新定義「和」關鍵字?

rule condition and another_condition do 
    do_something 
end 

我想and僅僅是我的班內的另一個紅寶石方法就像conditionanother_condition。這可能嗎?

+0

恕我直言,重新定義Ruby關鍵字是一個非常糟糕的主意...... – spickermann

+0

剛發現,這是不可能的。請參閱下面的答案。 – Stratus3D

+2

要重新定義一個關鍵字,您必須更改底層C代碼並重新編譯,之後會因爲您引入的大量錯誤而崩潰。換句話說,忘記它。 –

回答

1

類似於andor的關鍵字不能重載(重寫)。

本文介紹了運算符重載,並指定哪些運營商不能被重寫:

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

在文章的最後它指出:

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

更新

由於JörgW Mittag指出,那是錯誤的。 and,or,&&||是唯一不能被覆蓋的運算符。 not可以通過!覆蓋。

+0

請問,請複製粘貼源代碼中的相關部分,以便我們在這裏找到完整答案?一旦鏈接崩潰(發生的時間早於後者),具有相同問題的用戶不會得到完整的答案。 – tessi

+0

@tessi我更新了我的答案和相關信息。 – Stratus3D

+1

這是錯的。你*可以*覆蓋'&','''和'〜'。你也可以重寫'。()'(它被翻譯成'.call()')的調用。你可以重寫'not',或者更確切地說,你可以重寫'!',這也會改變'not'的行爲。而且沒有*根本原因*爲什麼'和','或','&&'和'||'不能被覆蓋,它只是不被支持。 –

0

它不受語言支持。

但是你可以隨時試用utils,如this之一。