gpt4 book ai didi

dart - 查找在另一个文件中声明的库

转载 作者:行者123 更新时间:2023-12-03 02:57:51 26 4
gpt4 key购买 nike

我试图在dart中调用对象的方法,该方法使用dart:mirrors进行镜像。我想使用的对象是一个类的实例,该类在另一个文件的库中定义。

main.dart

import 'dart:mirrors';

main(List<String> args) {
var libName = args[0];
var className = args[1];
var methodName = args[2];
MirrorSystem mirrors = currentMirrorSystem();
LibraryMirror lm = mirrors.findLibrary(new Symbol(libName));
ClassMirror cm = lm.declarations[new Symbol(className)];
InstanceMirror im = cm.newInstance(new Symbol(''), []);
im.invoke(new Symbol(methodName), []);
}

我写了另一个文件进行测试:

test.dart

library test;

class TestClass {
doStuff() => print("doStuff was called!");
}

如果我运行main.dart,则会出现异常:

dart main.dart test TestClass doStuff
Unhandled exception:
Exception: There is no library named 'test'
...

我可以在 main.dart 中添加库的导入语句,一切都很好

import 'test.dart';

但是我只在运行时知道库的名称。

如何在运行时导入库,或者有其他方法?

最佳答案

直到有更好的解决方案,我使用一个简单的解决方法。我调用另一个程序,该程序将所有必要的导入添加到我的主文件中并执行它:

import 'dart:io';

main(List<String> args) {
var template = new File('main.dart');
var tmp = new File('tmp.dart');

template.readAsString().then((String contents) {
// add necessary imports to template
var imp = args[0];
var code = "import '$imp.dart';\n" + contents;
tmp.writeAsStringSync(code);
// run modified template
var cmdArgs = [tmp.absolute.path];
cmdArgs.addAll(args);
Process.run('dart', cmdArgs).then((ProcessResult results) {
print(results.stdout);
});
});
}

由于我正在编写命令行应用程序,所以这还不错。

关于dart - 查找在另一个文件中声明的库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25471365/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com