匿名函式,說白了就是「沒有名字的函式」,恩廢話。給一段**可能更為直白:
$foo對,這就是匿名函式,沒什麼特別的,和一般函式結構神似,唯獨少了個函式名。而且這個函式可以作為乙個值被賦予乙個變數或者物件屬性。這種特性使得擁有匿名函式的程式語言再設計一些應用時,更為靈活。=function
()
匿名函式和普通函式最大的區別是在於,匿名函式可以作為乙個具體的「值」賦予給變數或者物件屬性,其次,由於匿名函式可以被定義在不同地方,使得他可以有效利用他所在的局域內的變數(或者說上下文中的變數)。下面例子中就是這樣一種情況。
class我們可以看到,匿名函式使用了上下文中的變數foo}
$name
='nick';(
newfoo
)->
exec
(function
()use
($name));
// 輸出: hi, nick
$name
。而實際上,這個匿名函式是在另乙個地方被執行(是在foo
類裡面被執行的)。這樣使得我們不必將變數name的值通過引數傳遞到類foo
的exec
方法中,而且可以減少在exec
方法中不必要的處理邏輯,使得類更容易專注於自己的職責。
匿名函式的作用還有很多,要知道,函式定義的時候是不會執行的,除非被呼叫。上文中例子其實就是這樣,我們可以看到,例子中,對$name變數的處理是在方法exec被呼叫後才發生,且利用了匿名函式被定義時的上下文中的變數。這種特性,我們可以利用來實現乙個控制反轉(ioc)容器。
/**上述例子中,只有在通過make方法獲取例項的時候,例項才被建立,這樣使得我們可以實現容器,我們依照這一特性,還可以更多的實現高階的特性如事件觸發等。利用好匿名函式,可以讓應用變得更加豐滿。* 乙個簡單的ioc容器
*/class
container
public
static
function
make
($abstract)}
/*** 示例用的 talk 類
*/class
talk
}/**
* 示例用的 a 類
*/classa}
/*** 示例用的 b 類
*/classb}
// 以下**是主要示例**
// 建立乙個talk類的例項
$talk
=new
talk
;// 將a類繫結至容器,命名為foo
container
::bind
('foo'
,function
());
// 將b類繫結至容器,命名為bar
container
::bind
('bar'
,function
());
// 通過容器取出例項
$talk
->
greet
(container
::make
('foo'
));// hi, nick
$talk
->
greet
(container
::make
('bar'
));// hi, amy
python匿名函式的使用
1.enumerate 方法可以同時拿到index和value。2.python匿名函式,lambda表示式,可以簡化 詳見2.2視覺化過程。3.map 函式返回的是map型別,需要轉換成list型別。示例 如下 coding utf 8 import requests from bs4 impor...
js匿名函式的使用
一 函式的宣告及呼叫 1.函式的宣告格式 function 函式名 引數1,引數2,函式的呼叫 1 直接呼叫 函式名 引數1的值,引數2的值,文件注釋 2 事件呼叫 在html標籤中,使用事件名 函式名 2.函式的注意事項 1 函式名必須要符合小駝峰法則,首字母小寫,之後每隔單詞首字母大寫 2 函式...
使用匿名類的建構函式
閱讀如下 看看是否可以編譯 public static void main string args list l3 new arraylist system.out.println l1.getclass l2.getclass system.out.println l2.getclass l3.g...