dart - 函数中的 'Closure'是什么?

标签 dart closures

我现在正在学习一门美丽的编程语言,Dart,我非常喜欢它。然而,我发现我的基本编程知识存在一些差距,其中之一是函数中的“闭包”,我发现它很难理解。你能给我解释一下匿名函数的独特之处吗?

最佳答案

“闭包”这个词可以用于许多不同的事物。

通常,最初,闭包是一个(函数)值,其中包含对变量的引用(它“关闭”这些变量)。

在 Dart 中,您可以通过两种不同的方式引入函数。

  • 函数声明:int foo(int x) => x;(作为顶级静态 - 如果前缀为static) >、实例或本地函数)。
  • 函数表达式:(int x) => x(作为表达式)。

第一个函数是命名的,可以通过名称调用,直接引用声明(foo(42))。 也可以通过“撕掉”函数将其变成函数:

int Function(int) f = foo;

函数表达式直接计算为函数值。

int Function(int) f = (int x) => x;

很多人对函数值使用“闭包”这个词,也称为“第一类函数值”,因为它们是像任何其他对象一样的对象,而不是只能以有限的方式使用。 如果您看到有人说“闭包”,请假设这就是他们的意思 - 一个对象,它也是一个函数

从技术上讲,此处的函数值不会封闭任何变量。 这样做的一个例子是:

int Function(int) adder(int base) => (int addition) => base + addition;
int Function(int) add2 = adder(2);

这里存储在add2变量中的函数值是函数表达式(intaddition)=>base+addition的值。 base 变量不受此表达式的约束,而是由闭包/函数值捕获/“封闭”。此处关闭的 base 变量来自对值为 2adder 的调用。

关于dart - 函数中的 'Closure'是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71048808/

相关文章:

flutter - 我无法从 cloud firestore 访问文档字段并在 flutter 的 statefulwidget 类中显示它

dart - charts_flutter - 如何设置 x 轴刻度的间隔

javascript - 将 javascript 闭包组合在一起

swift - 转义闭包是否捕获强链接?

html - 带有 ID 属性的结束标记

flutter - 带有图像抖动的AppBar标题

flutter - 展开数据表以填充Flutter中的高度

flutter - 'Router' 是从 'package:fluro/src/router.dart' 和 'package:flutter/src/widgets/router.dart' 导入的

Javascript:在对象闭包中使用访问器属性

java - 内部类是轻量级的吗?