Ruby方法


Ruby方法用於避免在程式中一次又一次地編寫相同的程式碼。它是一組有返回值的表示式。
Ruby方法與其他程式設計語言中的函式類似。 方法用於將一個或多個可重複語句合併成一個單獨的包。

定義方法

要使用方法,需要先定義它。 Ruby方法是用def關鍵字開始,後跟方法名稱定義的。最後還需要使用end關鍵字來表示方法定義結束。

方法名稱應始終以小寫字母開頭。 否則,可能被誤解為常數。

語法:

def methodName  
    code...  
end

範例:

#!/usr/bin/ruby

def method_defining(a1 = "Ruby", a2 = "Python")
   puts "The programming language is #{a1}"
   puts "The programming language is #{a2}"
end
method_defining "C", "C++"
method_defining

執行上面程式碼,得到以下結果 -

F:\worksp\ruby>ruby method_defining.rb
The programming language is C
The programming language is C++
The programming language is Ruby
The programming language is Python

F:\worksp\ruby>

在這裡,我們使用def關鍵字定義了一個名稱為:method_defining 的方法。 最後一行以end關鍵字結束,表示完成了方法的定義。並通過以下兩行程式碼呼叫方法 -

method_defining "C", "C++"
method_defining

從方法返回值

預設情況下,Ruby中的每個方法都有返回一個值。 這個返回的值將是最後一個語句的值。 例如 -

def my_method
   i = 100
   j = 10
   k = 1
end

上面程式碼中,最後方法的返回值是 1

Ruby return語句

ruby中的return語句用於從Ruby方法返回一個或多個值。

語法

return [expr [`,'expr ...]]

如果給出兩個以上的表示式,則返回值是包含這些值的陣列。 如果沒有給出表示式,將會返回nil值。

範例

#!/usr/bin/ruby

def method
   i = 100
   j = 200
   k = 300
return i, j, k
end
var = method
puts var

執行上面程式碼,產生以下結果 -

100
200
300

可變引數數

假設宣告一個方法需要兩個引數,每當呼叫這個方法時,需要傳遞兩個引數。但是,Ruby允許您宣告使用可變數量引數的方法。 讓我們來看一下這個範例 -

#!/usr/bin/ruby

def sample (*test)
   puts "The number of parameters is #{test.length}"
   for i in 0...test.length
      puts "The parameters are #{test[i]}"
   end
end
sample "Maxsu", "6", "F"
sample "Mac", "38", "M", "MCA"

儲存上面程式碼到檔案:var-number-of-parameters.rb,執行上面程式碼,得到到如下結果 -

F:\worksp\ruby>ruby var-number-of-parameters.rb
The number of parameters is 3
The parameters are Maxsu
The parameters are 6
The parameters are F
The number of parameters is 4
The parameters are Mac
The parameters are 38
The parameters are M
The parameters are MCA

F:\worksp\ruby>

類方法

當方法在類定義之外定義時,預設情況下該方法被標記為private。 另一方面,預設情況下,類定義中定義的方法被標記為public。模組的預設可見性和private標記可以通過模組的publicprivate更改。

Ruby給出一種不用範例化一個類就可以存取一個方法。下面來看看看如何宣告和存取類方法 -

class Accounts
   def reading_charge
   end
   def Accounts.return_date
   end
end

存取類方法 -

Accounts.return_date