2016-03-10 39 views
0

想實現這樣的事情:是否有可能在數學中像終點符號一樣在ruby中覆蓋括號運算符?

arr = (1..10) 

arr[2,5] = [2,3,4,5] 
arr(2,5] = [3,4,5] 
arr[2,5) = [2,3,4] 
arr(2,5) = [3,4] 

好了,我們需要覆蓋4個支架opreators:[],[)(],()

任何想法

這就是所謂的「包括或排除」在數學。https://en.wikipedia.org/wiki/Interval_(mathematics)#Including_or_excluding_endpoints

+0

儘管鏈接很有用,但您應該花時間將這些信息包含在您的問題中 - 這並不難解釋。還要覆蓋它首先必須存在的方法。只有數組[[]存在,另外三個'(]','[''''和'()'必須被創建。更不用說執行語法糖。 –

+0

不,您提出的語法並不能讓Ruby解析器理解。 –

回答

0

總之,這是不可能的與當前的Ruby解析器。

稍長的答案:您必須先修改parse.y以支持您提出的語法並重新編譯Ruby。這當然不是一個可怕的實用方法,因爲每一個新的Ruby版本都必須這樣做。更明智的做法是開始討論ruby-core以查看是否有足夠的興趣將其作爲語言的一部分(可能不是tbh)。

0

您想要的語法對於Ruby解析器無效,但可以通過自修改代碼在Ruby中實現。

需要預處理源文件。一個簡單的正則表達式可以用普通的方法的語法替換爲您間隔表達式,即

arr[2,5] -> interval_closed(arr,2,5) 
arr(2,5] -> interval_left_open(arr,2,5) 
arr[2,5) -> interval_right_open(arr,2,5) 
arr(2,5) -> interval_open(arr,2,5) 

保持經修改的源的字符串可被評估和成爲應用程序就像硬盤上的源文件的一部分。 (請參閱instance_eval

自修改代碼的使用應該合理。

  • 增值是值得的努力和併發症?
  • 代碼是否必須對其他程序員可讀?
  • 預處理是否可行?例如。這種語法是否會出現在一個或幾個獨立的文件中,或傳播到哪裏?
相關問題