0

如何在编译时将字符串常量自动设置为日期戳?

就像是:

    const String COMPILE_DATESTAMP = eval_static(DateTime.now().toString());
    ...
    String s = "This program was compiled $COMPILE_DATESTAMP";

其中 s 将代表例如“该程序已编译 1971-02-03 04:05:06”

4

3 回答 3

1

感谢您的提问!

Dart 中没有必需的编译步骤。(我们确实有一个可选的 Dart-to-JavaScript 编译器,甚至还有一个进行树抖动的 Dart-to-Dart 处理器。) Dart 的 VM 接受文本文件形式的输入。与 Ruby 或 Python 类似,它运行基于文本的脚本。

正如其他人所提到的,这是某种构建步骤的工作。

于 2013-04-10T02:19:44.350 回答
0

我是 Dart 的新手,但我在文档中没有看到任何东西表明这样的事情是可能的。我强烈怀疑它不是。

如果你真的需要你描述的功能,我认为你最好的选择是推出你自己的构建脚本。像这样简单的东西:

#!/bin/bash

sed -ri "s/INSERT_DATETIME_HERE/`date`/" $1
dart2js $1 -o$1.js

可以根据您的需要进行修改。(如果是我,我会想要在那里进行一些健全性检查;我只是建议一个起点。)您的代码将变为:

const String COMPILE_DATESTAMP = "INSERT_DATETIME_HERE";
...
String s = "This program was compiled $COMPILE_DATESTAMP";
于 2013-04-09T05:28:25.893 回答
0

您必须编写另一个可以检查实际编译程序的程序。然后很简单:

File compiledApp = new File('path/to/compiled/app.dart');
compiledApp.lastModified().then(
   (modifiedDate)
   {
        print("This program was compiled $modifiedDate");
   },
   onError: (exp) 
            {
               // File doesn't exist ?
            }
   );

这个技巧建立在编译器将修改文件的“最后修改日期”的知识之上

于 2013-04-09T11:58:17.840 回答