![]() |
1
20
您的示例不清楚,并且(imo)没有显示典型的捕获用法(捕获的唯一内容是
考虑下面的课本示例(谓词):
现在尝试它而不关闭;您需要做更多的工作,即使我们是懒惰的:
捕获方法进一步扩展到不同范围的许多变量-a 许多 隐藏的复杂性。 除了名称之外,上面是C编译器在幕后所做工作的近似值。注意,当涉及到其他范围时,我们开始链接不同的捕获类(即内部范围引用了外部范围的捕获类)。相当复杂。 乔恩·斯基特有一个很好的 article on this here 以及更多 in his book . |
![]() |
2
0
闭包是编译器的一个功能。你看不到它,它只是让你写的代码工作。 如果没有它,对addtoit(3)的调用将失败,因为基础lamda在addtoitclusure()范围内使用局部变量a=27。调用addToIt时,此变量不存在。 但是由于这个闭包是编译器使用的一种机制,所以代码可以工作,您不必关心它。 |
![]() |
Abhijit Sarkar · 如何修复“闭包可能比当前函数更有效” 3 年前 |
![]() |
Houman · 如果未调用闭包,如何使XCTest失败? 7 年前 |
![]() |
Kapil_A · 如何将swift中使用的闭包写入目标c? 7 年前 |
![]() |
Xendar · Jenkins管道模拟Groovy 7 年前 |
![]() |
Ibrahim Mohammed · 函数不考虑闭包 7 年前 |