6 回答

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超8個(gè)贊
現(xiàn)代的Java已經(jīng)支持閉包了。
標(biāo)準(zhǔn)的C不支持閉包。gcc和clang倒是有blocks擴(kuò)展。

TA貢獻(xiàn)1788條經(jīng)驗(yàn) 獲得超4個(gè)贊
C語(yǔ)言實(shí)現(xiàn)閉包函數(shù),可以參考《C語(yǔ)言接口與實(shí)現(xiàn)》一書,作者多次使用閉包,不過作者說的閉包應(yīng)該指的是回調(diào)函數(shù)。和Java估計(jì)不大相同。比如下面的這個(gè)函數(shù)Table_map,其中的回調(diào)函數(shù)apply,可以在C中稱為一個(gè)閉包。注:以上是作者的書中,中譯本的說法~
void Table_map(T table,
void apply(const void *key, void **value, void *cl),
void *cl) {
int i;
unsigned stamp;
struct binding *p;
assert(table);
assert(apply);
stamp = table->timestamp;
for (i = 0; i < table->size; i++)
for (p = table->buckets[i]; p; p = p->link) {
apply(p->key, &p->value, cl);
assert(table->timestamp == stamp);
}
}
添加回答
舉報(bào)