Ruby 方法


Ruby 方法與其他程式語言中的函數類似。 Ruby 方法用於將一個或多個重複的語句捆綁到一個單元。

方法名稱應以小寫字母開頭。如果您以大寫字母作為方法名的開頭,Ruby 可能會把它當作常數,從而導致不正確地解析呼叫。

方法應在呼叫之前定義,否則 Ruby 會產生未定義的方法呼叫異常。

語法

def method_name [( [arg [= default]]...[, * arg [, &expr ]])]
   expr..
end

所以,您可以定義一個簡單的方法,如下所示:

def method_name 
   expr..
end

您可以定義一個接受參數的方法,如下所示:

def method_name (var1, var2)
   expr..
end

您可以為參數設定預設值,如果方法呼叫時未傳遞必要的參數則使用預設值:

def method_name (var1=value1, var2=value2)
   expr..
end

當您要呼叫方法時,只需要使用方法名稱即可,如下所示:

method_name

但是,當您呼叫帶參數的方法時,您在寫入方法名稱時還要帶上參數,例如:

method_name 25, 30

使用參數方法最大的缺點是呼叫方法時需要記住參數個數。例如,如果您向一個接受三個參數的方法只傳遞了兩個參數,Ruby 會顯示錯誤。

實例

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-

def test(a1="Ruby", a2="Perl")
   puts "编程语言为 #{a1}"
   puts "编程语言为 #{a2}"
end
test "C", "C++"
test


以上實例運行輸出結果為:

编程语言为 C
编程语言为 C++
编程语言为 Ruby
编程语言为 Perl

從方法傳回值

Ruby 中的每個方法預設都會回傳一個值。這個傳回的值是最後一個語句的值。例如:

def test
   i = 100
   j = 10
   k = 0
end

在呼叫這個方法時,將傳回最後一個宣告的變數 k。

Ruby return 語句

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

語法

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

如果給出超過兩個的表達式,包含這些值的陣列將是傳回值。如果未給予表達式,nil 將是傳回值。

實例

return

或

return 12

或

return 1,2,3

看看下面的實例:

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-

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


以上實例執行輸出結果為:

100
200
300

可變數量的參數

假設您宣告了一個帶有兩個參數的方法,當您呼叫該方法時,您同時還需要傳遞兩個參數。

但是,Ruby 允許您宣告參數數量可變的方法。讓我們看看下面的實例:

#!/usr/bin/ruby
# -*- coding: UTF-8 -*-

def sample (*test)
   puts "参数个数为 #{test.length}"
   for i in 0...test.length
      puts "参数值为 #{test[i]}"
   end
end
sample "Zara", "6", "F"
sample "Mac", "36", "M", "MCA"


在這段程式碼中,您已經宣告了一個方法 sample,接受一個參數 test。但是,這個參數是一個變數參數。這意味著參數可以帶有不同數量的變數。以上實例運行輸出結果為:

参数个数为 3
参数值为 Zara
参数值为 6
参数值为 F
参数个数为 4
参数值为 Mac
参数值为 36
参数值为 M
参数值为 MCA

類別方法

當方法定義在類別的外部,方法預設標記為 private。另一方面,如果方法定義在類別中的,則預設標記為 public。

方法預設的可見性和 private 標記可透過模組(Module)的 publicprivate 改變。

當你想要存取類別的方法時,您首先需要實例化類別。然後,使用對象,您可以存取類別的任何成員。

Ruby 提供了一種不使用實例化即可存取方法的方式。讓我們看看如何宣告並存取類別方法:

class Accounts
   def reading_charge
   end
   def Accounts.return_date
   end
end

我們已經知道方法 return_date 是如何宣告的。它是透過在類別名稱後面跟著一個點號,點號後面跟著方法名稱來聲明的。您可以直接存取類別方法,如下所示:

Accounts.return_date

如需存取該方法,您不需要建立類別 Accounts 的物件。

Ruby alias 語句

這個語句用來為方法或全域變數起別名。別名不能在方法主體內定義。即使方法被重寫,方法的別名也保持方法的當前定義。

為編號的全域變數($1, $2,...)起別名是被禁止的。重寫內建的全域變數可能會導致嚴重的問題。

語法

alias 方法名 方法名
alias 全局变量 全局变量

實例

alias foo bar
alias $MATCH $&

在這裡,我們已經為 bar 定義了別名為 foo,為 $& 定義了別名為 $MATCH。

Ruby undef 語句

這個語句用來取消方法定義。 undef 不能出現在方法主體內。

透過使用undefalias,類別的介面可以從父類別獨立修改,但請注意,在自身內部方法呼叫時,它可能會破壞程式。

語法

undef 方法名

實例

下面的實例取消名為 bar的方法定義:

undef bar