hetu_script

使用 dart pub add 命令来安装最新版本:

dart pub add hetu_script

对于 Flutter 项目,使用 flutter 版本的命令行工具:

flutter pub add hetu_script
flutter pub add hetu_script_flutter

hetu_script_dev_tools

如果你需要在代码中,使用 import 语句导入你的文件系统上的另一个代码文件的内容。需要安装这个包。

dart pub add hetu_script_dev_tools

然后你需要使用 HTFileSystemResourceContext 辅助类, 在创建解释器时作为参数传入,替换掉默认的 sourceContext。

HTFileSystemResourceContext 的 root 参数是代码文件存放的根目录,如果不指定,会使用当前项目的根目录。

之后,你就可以使用解释器上的 evalFile() 方法来直接载入一个代码文件。你可以省略掉路径中 root 的部分。

import 'package:hetu_script/hetu_script.dart';
import 'package:hetu_script_dev_tools/hetu_script_dev_tools.dart';

void main() {
  final sourceContext = HTFileSystemResourceContext(root: '../../script/');
  final hetu = Hetu(sourceContext: sourceContext);
  hetu.init();
  final result = hetu.evalFile('import_test1.ht', invoke: 'main');
  print(result);
}

在代码中通过 import 语句引入其他代码文件的例子:

import 'hello.ht' as h

fun main {
  return h.hello()
}

另外,这个包还提供了一个 REPL 工具用来辅助测试。

hetu_script_flutter

对于想要在 Flutter APP 中引入作为 assets 资源文件的脚本的需求,可以安装这个包。

dart pub add hetu_script_flutter
assets:
  - scripts/main.ht

和 hetu_script_dev_tools 类似,你需要用新的 HTAssetResourceContext 辅助类, 在创建解释器时作为参数传入,替换掉默认的 sourceContext。

HTAssetResourceContext 的 root 参数是代码文件存放的根目录,如果不指定,会使用当前项目根目录下的 'scripts/'

在 Flutter APP 中,使用 initFlutter() 取代原本的 init() 来初始化解释器,这会提前载入你在 pubspec.yaml 中声明的代码资源文件。注意这是一个 async 方法,因此需要加上 await 关键字。

之后,你就可以使用解释器上的 evalFile() 方法来直接载入一个代码文件。你可以省略掉路径中 root 的部分。

final sourceContext = HTAssetResourceContext(root: 'scripts/');
final hetu = Hetu(sourceContext: sourceContext);
await hetu.initFlutter();

final result = hetu.evalFile('main.ht', invoke: 'main');
Last Updated:
Contributors: 邵燃, chengfubeiming