有没有办法将符号转换为字符串?
例如,VariableMirror返回符号而不是字符串。有没有办法将符号转换为字符串,所以我可以打印一个类的所有变量名称?
答案 0 :(得分:21)
import 'dart:mirrors';
void main() {
var sym = new Symbol('test');
print(MirrorSystem.getName(sym));
}
输出:
test
答案 1 :(得分:2)
事实证明这是一个简单的解决方案
print(MirrorSystem.getName(symbol));
打印
somename
另见:https://code.google.com/p/dart/issues/detail?id=17471
编辑
上述@lrn
链接问题的有趣评论难以使用"故意。符号可以通过dart2js缩小,查找原始名称只能通过镜像系统完成。这允许dart2js知道该功能是否完全使用,如果没有必要,则不包括转换表。 一般来说,我建议编码方式不需要将符号转换为字符串,如果可能的话。将它们视为不透明的令牌,只将它们与其他令牌进行比较。
smoke package为此提供了一项服务,该服务通过其转换器以一种也适用于缩小JavaScript的方式转换为代码。 symbolToName()
和nameToSymbol()
。
答案 2 :(得分:2)
我也在这个问题上堆叠 我不能在我的包中使用'dart:mirrors',所以使用下面的内容:
String s = new Symbol('hi').toString();
s = s.substring(8,pn.length-2);
看起来很糟糕,但它完成了工作。也许存在性能问题。
没想到这一点,谢谢 即使它现在有效,但未来也有可能出现破损,所以我想最好避免使用'toString()'。
确认:
Warning: 'hi=' is used reflectively but not in MirrorsUsed. This will break minified code.index.bootstrap.initialize.dart.js:7612
Warning: 'hi' is used reflectively but not in MirrorsUsed. This will break minified code`
答案 3 :(得分:0)
一些示例代码:
// Listen for App changes so we can do some things.
app.changes.listen((List<ChangeRecord> records) {
PropertyChangeRecord record = records[0] as PropertyChangeRecord;
String changedValue = MirrorSystem.getName(record.name);
if (changedValue == "pageTitle") {
print("$changedValue changed!");
}
}