6

有人能解释一下 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);

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

4

1 回答 1

10

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

对于您在下面拥有的数学库,平台独立库源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/runtimeand lib/math/dart2js,这使得 SDK 更简洁、更易于理解。

于 2012-10-12T06:02:14.417 回答