天天看點

Ruby 區間類型使用

 ruby使用區間實作了3中不同特性:序列,條件和間隔。

    一、序列

      在ruby中隻用".."和"..."區間操作符來建立序列。兩個點的形式是建立閉合的區間(包括右端的值),而3個點的形式

      是建立半開半閉的區間(不包括右端的值)。

      注意:

      1、任何類型的對象都可以構造區間,隻要這些對象可以使用它們的<=>操作符來進行比較,同時支援succ方法,傳回序列中的下一個對象

      2、區間在内部用清單表示,1..100序列被存儲為Range對象,它包含對兩個Fixum對象的引用。可以通過to_a方法把區間轉換成清單。

          (1..10).to_a ---[1,2,3,4,5,6,7,8,9,10]

   二、區間作為條件

      當區間作為條件的時候,它表現的就像一個雙向開關,當區間的第一部分的條件為true時,它們就打開,當區間第二部分

      的條件為true時,他們就關閉。

       注意,每一個區間對象唯一對應一個狀态機。

       1、在條件語句中區間作為條件時,當開始條件為true時,狀态機從原來狀态變更一次,然後緊接着判斷結束條件,如果

       結束條件為false,則狀态機的最終狀态為由開始條件時的狀态,如果為true,則狀态機的發生狀态變更。

         注意,結束條件的發生的狀态變更不會影響這條語句的傳回結果,這個語句的傳回結果由開始條件所決定的狀态機的結果而定。

         但是狀态機的結果受結束條件的影響。

       2、在循環或疊代中運用區間作為條件時,如果每次循環或疊代所使用的區間對象是同一個對象,那麼每次循環後的狀态機将影響下次循環。

      下面是列子:

ruby 代碼

  1. puts a = (11..20).collect {|i| (i%4==0)..(i%3==0) ? i : nil}  

  結果顯示如下:

1、  如果狀态機原來狀态是關,且開始條件為true,則狀态機将從關變成開,如果狀态機原來狀态是開,則狀态不變

2、  如果狀态機狀态為開,且結束條件為true,則狀态機将從開變關,如果狀态機狀态是關,則狀态不變。

3、  調用的傳回結果由目前狀态機的狀态列決定。如果為開就傳回true,否則傳回false

4、  區間對象第一次調用時,其狀态機狀态為關,以後每次調用時,其狀态機的初始狀态是上次調用結束後狀态機的狀态。

注意:如果是采用三點式的區間不會在進入開狀态後立即進入求解結束條件,

 三、區間作為間隔

      區間作為間隔測試:用于判斷一些值是否會落入區間表達的間隔内。使用===操作符完成這個。