(1)**清單11.8
(2)根據上例進行的:控制塊的執行
(3)proc將塊封裝為物件
之前我們使用塊,是定義方法然後根據這個方法名定義對應的塊,這樣方法名和塊是唯一對應。
下面講的是把塊當作物件處理,需要用到proc物件,那麼使用proc.new定義帶塊的方法,要呼叫塊就去呼叫proc物件的call方法。這樣的塊就不必和方法名唯一繫結。
(4)在方法定義時,如果末尾的引數使用"& 引數名"的形 式,ruby 就會自動把呼叫方法時傳進來的塊封裝為 proc 物件。改寫**清單11.8為該形式:
我們在首行的方法定義中定義了 &block 引數。像這樣,在變數名前新增 & 的引數被稱為 proc 引數。如果在呼叫方法時沒有傳遞塊,proc 引數的值就為 nil,因此通過這個值就可以判斷出是否有塊被傳入方法中。另外,執行塊的語句不是 yield,而是 block.call(num),這一點與之前的例子也不一樣。
在第 7 章中我們提到過方法可以有多個引數,而且定義引數的預設值等時都需要按照一定的順序。而 proc 引數則一定要在所有引數之後,也就是方法中最 後乙個引數。
將塊封裝為 proc 物件後,我們就可以根據需要隨時呼叫塊。甚至還可以將其賦值給例項變數,讓別的例項方法去任意呼叫。
(5)此外,我們也能將 proc 物件作為塊傳給其他方法處理。例如,向call_each方法以外的其他方法----- array#each 方法 傳遞proc物件:
這樣一來,我們就可以非常方便地把呼叫 call_each 方法時接收到的塊,原封不動地傳給其他方法------ ary.each 方法
(6)區域性變數與塊變數
區域性變數:如下在塊外面定義的變數就是區域性變數,x=1,y=1
塊變數:塊裡面的變數,|x|
(9)(1)塊變數能更改塊之外的區域性變數
modern c design 第十一章
本章介紹了經常遇到的雙分派的一種泛型解決方案。c 在語法上實現了單分派,即虛函式,通過動態機制選擇相應的函式。雙分派是形如fun object1 a,object2 b 根據a和b的實際型別動態自動分派乙個處理函式。最容易想到的方案,蠻幹法 寫一大堆過載函式.不過這種方法會有很強的依賴性。也提供了一...
第十一章3
第十一章 一 滾動元件 awt中的滾動元件包括scrollbar 滾動條 和滾動面板 scrollpane 兩種。1 滾動條scrollbar 在指定的取值範圍內快速選取某一值的功能。i.構造方法 public scrollbar int orientation,int value,int visi...
java第十一章
問題 1 錯誤 2 異常,1 編譯時異常 檢查異常 2 執行時異常 不檢查異常 是否能用 解決,是的就是異常,不是的就是錯誤 問題 1 先驗 2 捕獲 異常捕獲機智 異常的三個種類 1 檢查異常 2 執行時異常 3 錯誤 throw 提示方法呼叫者本方法可能發生異常 throw跟異常物件 throw...