介紹方法呼叫以及方法定義
將範例程式完成
可以將內部資料或外部資料作運算的功能
可執行的程式碼片斷
重複出現的程式碼可以寫成方法
呼叫者給予引數
被呼叫者(方法)取得參數
方法會運算之後可以回傳結果
方法後面使用小括號並給予引數
或是省略小括號直接給予引數
puts("Hello, world")
puts "Hello, world"
很多看起來是運算子的運算其實也是方法
Ruby所有東西都是物件
而物件的操作就被稱為方法
1.+(2.*(3)) vs 1.+2.*3 vs 1+2*3
在講解方法定義前要先知道有哪些變數
全域變數
區域變數
現在用不到的實體變數和類別變數
"有錢能使鬼推磨"
$stdin,$stdout,$stderr
任何地方都可以存取全域變數
但是因為到處都可以用被誰改了也不知道...
只有在該變數出現後才可以使用的變數
在被敘述或區塊包住的結構內可以使用外面的變數
但是該結構內的變數外面不能用
而方法定義則是獨立的可見範圍
接下來看看方法定義的語法吧
利用def關鍵字定義方法名稱以及參數
def add(a,b)
return a+b
end
方法會自動回傳最後的運算
只要是英文字母開頭都可以命名
但是要注意和區域變數撞名
建議是採用全小寫加上底線分隔
Ruby有非常多種參數傳遞方式
以下一一介紹
一個蘿蔔一個坑
像底下的例子一定要傳入兩個參數
def mul(a,b)
return a*b
end
mul 3,5
好像也有人說是預設引數...
可以在後面的參數給予預設值
省略引數不傳遞也沒有關係
def sub(a,b=0)
return a-b
end
sub 6
其實像是puts,print之類的方法可以傳入很多引數
定義方法時可以把不定個數的引數用陣列收集
def acc(*numbers)
return numbers.inject(:+)
end
acc 1,4,9,16
在Ruby2.0後支援的功能
可以傳遞帶有名字的引數方便辨識
def func(a: 0, b: 0, method: :+)
return a.send(method,b)
end
func method: :**,a: 2,b: 12
其實是命名參數的原先版本
傳遞了錯誤的引數也不會發現...
def func(op)
return op[:a].send(op[:method],op[:b])
end
func a: 2,b: 12,metnod: :**
仔細看看??
定義方法的時候參數有很多種設計
挑選合適的來搭配才有好效果
不會讓同學撰寫全部的程式碼
只需要定義函式並且實作內部功能
需要使用gem這個ruby套件管理工具
rubysdl和ruby-sdl-ffi都要裝
gem install ruby-sdl-ffi
gem install rubysdl-mswin32-1.9
install_rubysdl
rubysdl提供了各種包裝好的SDL功能
不過這次只是要用他的dll
ruby-sdl-ffi則是直接取用SDL的函式
雖然比較難用不過跨平台比較方便
在程式碼中會有註解以及提示
特別注意 ?? 的部份
刪除兩個問號並且填入程式碼
標記位置只是輔助 有需要其他程式碼也可以自己寫
可以利用IRB來實驗方法的使用
開啟文字編輯器以及命令列
慢慢完成程式吧