匿名函式的使用

2021-07-11 11:26:14 字數 1734 閱讀 7918

匿名函式,說白了就是「沒有名字的函式」,恩廢話。給一段**可能更為直白:

$foo 

=function

()

對,這就是匿名函式,沒什麼特別的,和一般函式結構神似,唯獨少了個函式名。而且這個函式可以作為乙個值被賦予乙個變數或者物件屬性。這種特性使得擁有匿名函式的程式語言再設計一些應用時,更為靈活。

匿名函式和普通函式最大的區別是在於,匿名函式可以作為乙個具體的「值」賦予給變數或者物件屬性,其次,由於匿名函式可以被定義在不同地方,使得他可以有效利用他所在的局域內的變數(或者說上下文中的變數)。下面例子中就是這樣一種情況。

class

foo}

$name

='nick';(

newfoo

)->

exec

(function

()use

($name));

// 輸出: hi, nick

我們可以看到,匿名函式使用了上下文中的變數$name。而實際上,這個匿名函式是在另乙個地方被執行(是在foo類裡面被執行的)。這樣使得我們不必將變數name的值通過引數傳遞到類fooexec方法中,而且可以減少在exec方法中不必要的處理邏輯,使得類更容易專注於自己的職責。

匿名函式的作用還有很多,要知道,函式定義的時候是不會執行的,除非被呼叫。上文中例子其實就是這樣,我們可以看到,例子中,對$name變數的處理是在方法exec被呼叫後才發生,且利用了匿名函式被定義時的上下文中的變數。這種特性,我們可以利用來實現乙個控制反轉(ioc)容器。

/**

* 乙個簡單的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

上述例子中,只有在通過make方法獲取例項的時候,例項才被建立,這樣使得我們可以實現容器,我們依照這一特性,還可以更多的實現高階的特性如事件觸發等。利用好匿名函式,可以讓應用變得更加豐滿。

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...