由于在启动 dart 应用程序之前需要进行编译,我想知道编译器预处理器是否可用,或者计划在不久的将来用于 Dart。
到目前为止,我在网上/飞镖网站内的搜索均未成功。
(通过预处理器,我的意思是:
#define max(A,B) ( (A) > (B) ? (A):(B))
Run Code Online (Sandbox Code Playgroud)
或者 :
#define NumType double
#define NumTypeZero 0.0
// used with :
NumType myNum = NumTypeZero;
Run Code Online (Sandbox Code Playgroud)
或者 :
#define DEBUG
// use
#ifdef DEBUG
print('var1 : $var1, var2:$var2, ...');
#endif
Run Code Online (Sandbox Code Playgroud)
)
编辑:我想知道为什么没有准备好预处理器,因为从那时起我们似乎“接近”了:
-Dart 必须扫描文件中的库依赖项才能以正确的顺序加载库。
- Dart 编辑器还会扫描文件以进行语法、类型检查和其他检查。
- 可以在编辑器中启动一些自动文件处理(我找不到有价值的链接,如果你有的话请告诉我)。
基本上其他人说的...
如果您使用 dart2js 进行编译,如果 DEBUG 是常量且为 false,则摇树将已经抛出 if (DEBUG) {} 块内的代码。所以你可以只使用 if 语句。
您还可以使用 assert() 语句。在使用 dart2js 编译生产模式时,断言和传递给它的表达式将被丢弃。
所以这实际上与您使用 #ifdefs 获得的行为相同 - 您可以将 dart2js 视为您的预处理器 ;)
我也没有看到您为什么要使用 #defines 而不是常量的任何理由。
如果你想在 DartVM 中运行你的代码,你可以使用 dart2js --output-type=dart 在你的 dart 源上做 tree-shaking。
更新:另见String.fromEnvironment()、bool.fromEnvironment()和int.fromEnvironment()。您可以在编译时使用“dart2js -D<env-var-name>=<value>”设置这些环境变量。
| 归档时间: |
|
| 查看次数: |
4729 次 |
| 最近记录: |