歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux教程

Linux系統:閉包的概念形式與應用(2)

10.times 表示調用對象10的 times 方法(注 5),緊跟在這個調用後面的大括號裡面的部分就是Block。所謂 Block 是指緊跟在函數調用之後用大括號或 do/end 括起來的代碼,Block 的開始部分(左大括號或 do)必須和函數調用在同一行。Block 也可以接受參數,參數列表必須用兩個豎槓括起來放在最前面。Block 會被作為它前面的函數調用的參數,而在這個函數中可以使用關鍵字 yield 來調用該 Block。在這個例子中,10.times 會以數字0到9為參數調用 Block 10次。 
    Block 實際上就是匿名函數,它可以被調用,可以捕獲上下文。由於語法上要求 Block 必須出現在函數調用的後面,所以 Block 不能直接作為函數的的返回值。要想從一個函數中返回 Block,必須使用 proc 或 lambda 函數把 Block 轉化為對象才行。詳細內容請參考參考資源和3。 
    Python 中的閉包 
    Python 因其簡單易學、功能強大而擁有很多擁護者,很多企業和組織在使用這種語言。Python 使用縮進來區分作用域的做法也十分有特點。下面是一個 Python 的例子: 
    清單 6. Python 1 
    def addx(x):
     def adder (y): return x + y
     return adder 
    add8 = addx(8)
    add9 = addx(9) 
    print add8(100)
    print add9(100) 
  
    在 Python 中使用 def 來定義函數時,是必須有名字的,要想使用匿名函數,則需要使用lambda 語句,象下面的代碼這樣: 
    清單 7. Python 2 
    def addx(x):
     return lambda y: x + y 
    add8 = addx(8)
    add9 = addx(9) 
    print add8(100)
    print add9(100) 
  
    Python 簡單易用且功能強大,關於 Python 的更多信息請參考參考資源。 
    Perl 中的閉包 
    Perl 是老牌文本處理語言了,在 WEB 開發方面也有一席之地。不過 Perl6 的開發進行比較慢,也許一些用戶開始轉投其它語言了。下面是一個 Perl 的例子。 
    清單 8. Perl 
    sub addx {
     my $x = sit;
     return sub { shift() + $x };
    } 
    $add8 = addx(8);
    $add9 = addx(9); 
    print $add8->(100);
    print $add9->(100); 
  
    Lua 中的閉包 
    Lua 以其小巧和快速的特點受到 游戲開發 者的青睐,被一些游戲用來定制 UI 或作為插件語言,如果你玩過《魔獸世界》,那你對 Lua 一定不會感到陌生。前面在說明閉包原理時就使用了 Lua,這裡就不再給出其他的例子了。更多的內容請參考參考資源。 

Copyright © Linux教程網 All Rights Reserved