存放**片斷
proc可以將要執行的一些**片斷放在一起,卻不立即執行,而是在後來我們想要執行它的時候來呼叫。
ruby**
say_hello = proc.new # **不會立即執行
say_hello.call # 現在我們來呼叫執行proc的存放的**
# => "hello!"
用proc來組織我們的**
proc是組織**的好工具,比如現在我們要測試一下某些**的執行花費時間,通過proc可以很靈活地做到這一點:
ruby**
def time(a_proc)
start = time.now
a_proc.call
puts time.now - start
endtime(proc.new )
time(proc.new )
blocks!
用block來實現上面說的更方便,而且看起來漂亮一些:
ruby**
def time
start = time.now
yield
puts time.now - start
endtime
time
那個yield就和a_proc.call類似,是作用block的乙個點位符。
向proc和block中傳遞引數
向proc和block中傳遞引數的方式是一樣的:
ruby**
def dumb_hello_world_test
yield(5)
enddumb_hello_world_test
# => 10
my_silly_proc = proc.new
my_silly_proc.call("august lilleaas")
# => "august lilleaas"
看一下這個例子
ruby**
[1, 2, 3].map
# => 2
# => 4
# => 6
我們自己再來實現array中的each方法
ruby**
class
array
defeach
i = 0
while(i
yield(self[i])
i += 1
endend
endmy_array = ["a", "b", "c"]
my_array.each
# => "a"
# => "b"
# => "c"
另外對於block,有兩種形式
{}和do end 前者優先順序高。
**:
ruby中的模組
什麼是模組 模組 module 是ruby特有的功能之一。類用來表現具有資料與行為 程式 的 東西 而模組大致來說,則是只有程式部分的集合體。類與模組最大的不同在於 1.模組不能建立例項 2.模組不能繼承 模組的用法 1 提供命名空間 命名空間 namespace 是為了讓方法 常數 類名稱不互相衝...
Ruby中的迴圈
1 首先是while迴圈和until迴圈 這是兩種相反的迴圈,舉例說明 x 1 until x 100 puts x x x 2 end 輸出 124 8163264 x 1 until x 100 puts x x x 2 break if x 200 end 永遠都不會執行 而while與unt...
ruby 中的符號
1.1 建立乙個繫結到特定物件的class a my string class book to sym 2.book 3.track.to s 4.track 2.相同的符號是乙個物件,相同的字元並不一定是乙個物件 這就是符號和字串最大的差別,符號是不可變的,不能對乙個符號進行修改。所以說,兩個看起...