Dart中的patch关键字有什么作用?

Set*_*add 3 dart

有人可以解释一下patch关键字的作用吗?例如,在 math_patch.dart我看来

patch num pow(num x, num exponent) => MathNatives.pow(x, exponent);
patch double atan2(num a, num b) => MathNatives.atan2(a, b);
patch double sin(num x) => MathNatives.sin(x);
patch double cos(num x) => MathNatives.cos(x);
Run Code Online (Sandbox Code Playgroud)

这是什么意思?什么是_patch.dart文件?

Set*_*add 7

补丁机制在内部使用(并且仅在内部可用,而不是最终用户),以提供核心库功能的不同实现.

对于下面的数学库,平台无关的库源将lib/math声明这些方法external. external方法从补丁文件中获取它们的实现.VM中有一个补丁文件runtime/lib/math_patch.dart,它为VM提供实现,dart2js编译器中 有一个补丁文件lib/compiler/implementation/lib/math_patch.dart,用于提供 dart2js实现.

external关键字由分析器理解并做这种方式只允许共享的部分是在SDK和工具来理解.这意味着SDK可以拥有lib/math而不是拥有 lib/math/runtimelib/math/dart2js,这使SDK更清晰,更容易理解.