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
例項:
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
deftest(a1="ruby", a2="perl")
puts "程式語言為 #"
puts "程式語言為 #"
endtest "c", "c++"
test
結果:
程式語言為 c
程式語言為 c++
程式語言為 ruby
程式語言為 perl
關鍵字引數
關鍵字引數是 ruby 2.0 中的新特性。
在目前為止介紹過的方法定義中, 我們都需要定義呼叫方法時的引數個數以及呼叫順序。 而使用關鍵字引數, 就可以將引數名與引數值成對地傳給方法內部使用。
使用關鍵字引數定義方法的語法如下所示:
def 方法名(引數 1: 引數 1 的值, 引數 2: 引數 2 的值, …)
希望執行的處理
end
除了引數名外, 使用「引數名 : 值」這樣的形式還可以指定引數的預設值。 用關鍵字引數改寫計算立方體表面積的 area 方法的程式如下所示:
def area2(x: 0, y: 0, z: 0)
xy = x * y
yz = y * z
zx = z * x
(xy + yz + zx ) * 2
endp area2(x: 2, y: 3, z: 4) #=> 52
p area2(z: 4, y: 3, x: 2) #=> 52 (改變引數的順序)
p area2(x: 2, z: 3) #=> 12 (省略y)
了避免呼叫方法時因指定了未定義的引數而報錯, 我們可以使用「** 變數名」的形式來 接收未定義的引數。 下面這個例子的方法中, 除了關鍵字引數
x、 y、 z 外, 還定義了 **arg 引數。 引數 arg 會把引數列表以外的關鍵字引數以雜湊物件的形式儲存。
def
meth(x:
0, y:
0, z:
0, **args)
[x, y, z, args]
endp meth(z:
4, y:
3, x:
2) #=> [2, 3, 4, {}]
p meth(x:
2, z:
3, v:
4, w:
5) #=> [2, 0, 3, ]
用雜湊傳遞引數
呼叫用關鍵字引數定義的方法時, 可以使用以符號作為鍵的雜湊來傳遞引數。 這樣一來, 程式就會檢查雜湊的鍵與定義的引數名是否一致, 並將與雜湊
的鍵一致的引數名傳遞給方法。
def area2(x: 0, y: 0, z: 0)
xy = x * y
yz = y * z
zx = z * x
(xy + yz + zx ) * 2
endargs1 =
p area2(args1) #=> 52
args2 = #=> 省略y
p area2(args2) #=> 12
ruby 中的每個方法預設都會返回乙個值。這個返回的值是最後乙個語句的值。例如:
def test
i = 100
j = 10
k = 0
end
在呼叫這個方法時,將返回最後乙個宣告的變數 k。
ruby 中的 return 語句用於從 ruby 方法中返回乙個或多個值。
語法:
return [expr[`,' expr...]]
如果給出超過兩個的表示式,包含這些值的陣列將是返回值。如果未給出表示式,nil 將是返回值。
例項:
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
def test
i = 100
j = 200
k = 300
return i, j, k
endvar = test
puts var
結果:
100
200
300假設您宣告了乙個帶有兩個引數的方法,當您呼叫該方法時,您同時還需要傳遞兩個引數。
但是,ruby 允許您宣告引數數量可變的方法。讓我們看看下面的例項:
#!/usr/bin/ruby
# -*- coding: utf-8 -*-
defsample (*test)
puts "引數個數為 #"
for i in
0...test.length
puts "引數值為 #"
endend
sample "zara", "6", "f"
引數個數為 3
引數值為 zara
引數值為 6
引數值為 f
當方法定義在類的外部,方法預設標記為 private。另一方面,如果方法定義在類中的,則預設標記為 public。
方法預設的可見性和 private 標記可通過模組(module)的 public 或 private 改變。
當你想要訪問類的方法時,您首先需要例項化類。然後,使用物件,您可以訪問類的任何成員。
ruby 提供了一種不用例項化即可訪問方法的方式。讓我們看看如何宣告並訪問類方法:
class
accounts
defreading_charge
enddefaccounts.return_date
endend
我們已經知道方法 return_date 是如何宣告的。它是通過在類名後跟著乙個點號,點號後跟著方法名來宣告的。您可以直接訪問類方法,如下所示:
accounts.return_date
單例類方法
讓我們在 class << 類名 ~ end 這個特殊的類定義中, 以定義例項方法的形式來定義類方法
class
<
< helloworld
defhello(name)
puts "# said hello."
endend
helloworld.hello("john") #=> john said hello
class《類名~end 這種寫法的類定義成為單例類定義, 單例類定義中定義的方法成為單例方法 ruby學習筆記 7 方法
定義方法 def method puts method end 呼叫時可以帶或不帶 均可 method method method method 使用引數 def methoduseargs arg1,arg2 print arg1,arg2 end 呼叫時可以帶或不帶 均可 methodusear...
06,方法的詳解
修飾符 返回值型別 方法名 引數列表 public class method demo2 定義計算兩個整數和的方法 返回值型別,計算結果是int 引數 不確定資料求和,定義int引數.引數又稱為形式引數 public static intgetsum int a,int b 程式執行,主方法main...
Ruby學習筆記2(方法 塊 模組)
ruby中的方法就是其他語言中的函式,名稱應以小寫開頭,以免被解釋為常量。引數可有可無,可以有預設值也可以沒有。每個方法都有預設的返回值,就是最後乙個語句的值。def test a1 ruby a2 perl puts 程式語言為 puts 程式語言為 endtest c c test要傳入數量可變...