跳轉到內容

Ruby 程式設計/方法呼叫

來自華夏公益教科書,開放的書籍,開放的世界

super 關鍵字可用於呼叫在進行呼叫的類的超類中具有相同名稱的方法。傳遞給 super 呼叫的值將傳遞到父方法。

示例

 class SomeClass
   def initialize(name)
   end
 end
 class ChildClass < SomeClass
   def initialize(name, value)
     super(name)
   end
 end

呼叫上面子類的 initialize 函式將導致執行其主體和父類中 initialize 函式的主體。

請注意,如果您在沒有引數的情況下呼叫 super,則執行方法的所有引數也將傳遞給父方法 - 並且如果父方法的簽名與引數數量不匹配,則會引發異常。因此,如果子方法使用的引數數量與超類中的版本不同,則需要列出要傳遞給父方法版本的方法。

還要注意,您可以使用任何方法名稱,而不僅僅是 initialize(在本例中)。

迭代器

[編輯 | 編輯原始碼]

迭代器提供了一種方法來迴圈遍歷一組值並對每個值執行操作,通常由程式碼塊指定。迭代器功能通常透過 mixin Enumeration 模組提供。

Ruby 程式設計師可能會遇到的第一個迭代器是 each 迭代器。

示例

 arr = [1,2,3]
 arr.each do |number|
   put number
 end

輸出

 1
 2
 3

yield 執行傳遞給方法的整個程式碼塊。

示例

 def do3times
   yield
   yield
   yield
 end
 
 do3times { puts "yielding..." }

輸出

 yielding...
 yielding...
 yielding...


因此,您可以建立自己的方法,使其看起來像內建的 times

 class Fixnum
   def times_plus1
     i = 1
     while i <= self + 1
       i += 1
       yield
     end
   end
 end


 5.times_plus1 { puts "yielding..." }

輸出

 yielding...
 yielding...
 yielding...
 yielding...
 yielding...
 yielding...
上一節:控制結構 索引 下一節:類
華夏公益教科書