perl中的閉包使用

2022-08-29 20:30:26 字數 1262 閱讀 2813

直接先上**,看看示例一的實現:

示例一:

sub make_new_counter;

}#**分析:

#匿名函式的父函式是make_new_counter,兩者間存在關聯關係,同時匿名函式返回給了標量$from_zero,

#這個標量函式還存在於當前上下文中,記憶體並未釋放,

#導致其關聯的父函式make_new_counter呼叫棧也未被釋放,因此計數start可以累加,

#類似於c語言中的state 關鍵字修飾區域性變數`state int start = 0`

#返回匿名函式引用,並且這個匿名函式帶有狀態

my$from_zero = make_new_counter(0);

my$from_three = make_new_counter(3);

#從零開始的計時器

$from_zero->();

$from_zero->();

#從三開始的計時器

$from_three->();

$from_three->();

執行結果:

013

4

閉包概念

閉包就是能夠讀取其他函式內部變數的函式,如上述**中的匿名函式。

閉包特徵

判斷是否是閉包,可以看以下兩個關鍵點:

沒有被建立它的上下文銷毀

引用了自由變數

自由變數就是沒有在函式塊中定義,也沒有從arguments中送入,也不在全域性上下文中定義的這些變數,如上述**中的start。

閉包作用

閉包可以用在許多地方。它的最大用處有兩個:

讓這些變數的值始終保持在記憶體中,如示例一

讀取函式內部的變數,如示例二

示例二:

sub city_name;}my

$city = city_name();

#正常情況下,區域性變數$city_name在函式呼叫結束後,對應的呼叫棧已經釋放,無法正常訪問,

#但是由於閉包的引入,使得$city_name一直存在於記憶體中,並未被釋放,所有可以正常訪問;

print

"name:",$city->();#輸出fuzhou

閉包劣勢

由於閉包會使得函式中的變數都被儲存在記憶體中,記憶體消耗很大,所以不能濫用閉包,否則會影響效能。

閉包 Python中的閉包

通俗地講就是別人家有某個東西,你想拿到但是因為許可權不夠 不打死你才怪 但是你可以跟家裡的孩子套近乎,通過他拿到!這個家就是區域性作用域,外部無法訪問內部變數,孩子是從家裡返回物件,對家裡的東西有訪問許可權,借助返回物件間接訪問內部變數!def outer 別人家 x 10 別人家裡的東西 def ...

python中 閉包 的使用

閉包 1.函式的再認識 函式名僅僅是乙個變數,只不過指向的是定義的函式體,通過函式名 可以呼叫該函式 如果函式名 被修改了,那麼再次執行函式名 時,呼叫的就不是之前的函式了 小結 1.函式名也是變數 2.可以把函式名當做引數來使用 2.閉包的結構 1.外部函式 外部函式返回內部函式的位址空間引用 2...

C 中閉包的使用

二.c 中閉包的實現 三.c 中使用閉包的注意事項 參考資料 1.維基百科中的閉包概念 在電腦科學中,閉包 closure 又稱詞法閉包 lexical closure 或函式閉包 function closures 是引用了自由變數 未繫結到特定物件 的函式。這個被引用的自由變數將和這個函式一同存...