ruby中的 Proc block說明

2021-06-22 15:01:35 字數 1425 閱讀 5053

存放**片斷

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.相同的符號是乙個物件,相同的字元並不一定是乙個物件 這就是符號和字串最大的差別,符號是不可變的,不能對乙個符號進行修改。所以說,兩個看起...