Can you summarize the following document?
        
  

  嘗試將類按名稱排序:  上述 codice_1 的類名是“codice_2”,codice_3 的類名是“codice_4”而 codice_5 的類名是“codice_6”,排列後的順序為“codice_2”“codice_4”,接著是“codice_6”。  該示例中的匿名函式就是lambda表示式: 該匿名函式接受兩個變數 codice_10 和 codice_11,通過內部函式 codice_12 返回兩者的比較值,下面的例子將按長度為字串行表排序:

  

  Python用lambda語法定義匿名函式,只需用表示式而無需宣告

  JavaScript支援匿名函式。 小書籤也經常使用這種結構,例如下面的一個小書籤就將當前網頁的標題顯示為其URL:  然而,由於該賦值語句返回了一個值(即URL本身),很多瀏覽器會同時建立一個新的頁面顯示這個值。  取而代之,下面的匿名函式就可以做到不返回任何值: 第一對圓括號中的函式(“(function(){document.title=location.href;})”)用作宣告一個匿名函式,而最後的一對圓括號則用來執行這個函式。同等用法有:

  PHP 4.0.1之前不支援匿名函式。

  PHP 4.0.1新增加了codice_13函式,這是匿名函式的雛形。該函式能建立一個隨機命名的新函式並以字串形式返回新函式的函式名。  要注意的是,新函式本身及其變數都要放在單引號裡面,如果要放在雙引號之內,美元符號“$”則需要轉碼成為“\$”。

  PHP 5.3新增加了codice_14類,以及能使類的例項可被呼叫的“魔術方法”codice_15。Lambda函式都是編譯器的一種“花招”,它能產生新的能被呼叫的codice_14例項,就像函式能被呼叫一樣。 上述例子中的codice_17是codice_14類的一個例項,而codice_19則相當於是codice_20。PHP 5.3模仿使用匿名函式,但並非支援真匿名函式,因為PHP的函式仍非第一類函式。  雖然PHP 5.3支援閉包,但還需要像這樣明確標識其變數:  codice_17引用了變數codice_22(&$x),在呼叫的時候就會修改原來的$x,其結果在函式以外的地方也是可見的。

  

  C++ 98/03標準並不原生支援匿名函式。不過可以利用Boost庫的Boost.Lambda來實現一個匿名函式。

  C++11標準提供了匿名函式的支援,在《ISO/IEC 14882:2011》(C++11標準文件)中叫做lambda表示式。一個lambda表示式有如下的形式:  必須用方括號括起來的capture列表來開始一個lambda表示式的定義。  lambda函式的形參表比普通函式的形參表多了3條限制: 如果lambda函式沒有形參且沒有mutable、exception或attribute宣告,那麼引數的空圓括號可以省略。但如果需要給出mutable、exception或attribute宣告,那麼引數即使為空,圓括號也不能省略。  如果函式體只有一個return語句,或者返回值型別為void,那麼返回值型別宣告可以被省略: 一個lambda函式的例子如下:  在上面的第一個例子中這個無名函式的返回值是codice_23。如果lambda函式體的形式是codice_24,或者什麼也沒返回,或者所有返回語句用codice_25都能檢測到同一型別,那麼返回值型別可以被省略。  返回值型別可以顯式指定,如下所示:  在這個例子中,一個臨時變數,codice_26,被建立來儲存中間過程。與一般的函式一樣,中間值在呼叫的前後並不存在。什麼也沒有返回的lambda表示式無需顯式指定返回值,沒有必要寫codice_27程式碼。  lambda函式可以捕獲lambda函式外的具有automatic storage duration的變數,即函式的區域性變數與函式形參變數。因而,具有static storage duration的變數不能被lambda捕獲,只能直接使用,這包括靜態區域性變數。函式體與這些變數的集合合起來稱做閉包。這些外部變數在宣告lambda表示式時列在在方括號codice_28和codice_29中。空的方括號表示沒有外界變數被capture或者按照預設方式捕獲外界變數。這些變數被傳值捕獲或者引用捕獲。對於傳值捕獲的變數,預設為只讀(這是由於lambda表示式生成的為一個函式物件,它的codice_30成員預設有const屬性)。修改這些傳值捕獲變數將導致編譯報錯。但在lambda表示式的參數列的圓括號後面使用mutable關鍵字,就允許lambda函式體內的語句修改傳值捕獲變數,這些修改與lambda表示式(實際上是用函式物件實現)有相同的生命期,但不影響被傳值捕獲的外部變數的值。lambda函式可以直接使用具有static儲存期的變數。如果在lambda函式的捕獲列表中給出了static儲存期的變數,編譯時會給出警告,仍然按照lambda函式直接使用這些外部變數來處理。因此具有static儲存期的變數即使被宣告為傳值捕獲,修改該變數實際上直接修改了這些外部變數。編譯器生成lambda函式對應的函式物件時,不會用函式物件的資料成員來保持被“捕獲”的static儲存期的變數。示例:  下面這個例子展示了lambda表示式的使用: 在類的非靜態成員函式中定義的lambda表示式可以顯式或隱式捕捉codice_31指標,從而可以引用所在類物件的資料成員與函式成員。物件的this指標必需顯式捕獲宣告。因此,被捕獲的類的資料成員總是用this指標來訪問,如果this所指的物件不存在,則this是空懸指標。解決辦法是在定義lambda之前用區域性變數複製一份資料成員的值,然後捕獲這個區域性變數的值。  lambda函式的函式體中,可以訪問下述變數:  lambda函式的資料型別是函式物件,儲存時必須用codice_32模板型別或codice_33關鍵字。 例如: 一個lambda函式的捕捉表示式為空,則可以用普通函式指標儲存或呼叫。例如:

  C++11中捕獲機制的侷限  C++14增加了廣義捕獲(Generalized capture),或稱“初始化捕獲”。即在捕獲子句(capture clause)中增加並初始化新的變數,該變數不需要在lambda表示式所處的閉包域(enclosing scope)中存在;即使在閉包域中存在也會被新變數覆蓋(override)。新變數型別由它的初始化表示式推導。一個用途是可以從閉包域中捕獲只供移動的變數並使用它。形如[mVar1 = localVar1, mVar2 = std::move(localVar2)](){};  C++14還允許lambda函式的形參使用codice_33關鍵字作為其型別,這實質上是函式物件的codice_30成員作為模板函式;並且允許可變引數模板。

  匿名函式或lambda表示式即無名的函式或過程,作為表示式的值。可以寫為一行或多行。例如:  可以在宣告匿名函式的同時呼叫它。單行的lambda表示式不能使用Return關鍵字,其返回型別是自動推導得出;其引數要麼都是用As關鍵字指明型別,要麼全部是自動推匯出型別。  lambda表示式在定義時可以使用所在上下文(context,即C++語言的閉包closure)的區域性變數、引數、屬性、Me等等的值,即使lambda表示式離開了定義時所在的context,這些被使用的區域性變數等的值仍然有效。這是因為lambda表示式在定義時把所用到的context的值儲存到它自己的定義類中。lambda表示式可以巢狀定義。
匿名函式(英語:Anonymous Function)在計算機程式設計中是指一類無需定義識別符號(函式名)的函式或子程式,普遍存在於多種程式語言中。