Dart 将符号转换为字符串

Dart 将符号转换为字符串,dart,Dart,有没有办法将符号转换成字符串 例如,VariableMirror返回符号而不是字符串。是否有办法将符号转换为字符串,以便打印类的所有变量名?使用: 导入“dart:mirrors”; void main(){ var sym=新符号(“测试”); 打印(MirrorSystem.getName(sym)); } 这将产生: test 测试 事实证明有一个简单的解决方案 print(MirrorSystem.getName(symbol)); 印刷品 名字 另见: 编辑 @lrn对上述问题的有

有没有办法将符号转换成字符串

例如,VariableMirror返回符号而不是字符串。是否有办法将符号转换为字符串,以便打印类的所有变量名?

使用:

导入“dart:mirrors”;
void main(){
var sym=新符号(“测试”);
打印(MirrorSystem.getName(sym));
}
这将产生:

test 测试
事实证明有一个简单的解决方案

print(MirrorSystem.getName(symbol));
印刷品

名字

另见:

编辑

@lrn对上述问题的有趣评论

它是故意“难以使用”的。符号可以通过dart2js缩小,并且只能通过镜像系统查找其原始名称。这允许dart2js知道是否使用了该功能,如果不需要,则不包括翻译表。 一般来说,如果可能的话,我建议以一种不需要将符号转换为字符串的方式进行编码。将它们视为不透明标记,并仅将其与其他标记进行比较

提供了一个服务,该服务通过其转换器以一种同样适用于小型JavaScript的方式转换为代码
symbolToName()
nameToSymbol()

一些示例代码:

// 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!");
  }
}
//监听应用程序更改,以便我们可以做一些事情。
app.changes.listen((列出记录){
PropertyChangeRecord=记录[0]作为PropertyChangeRecord;
String changedValue=MirrorSystem.getName(record.name);
如果(changedValue==“pageTitle”){
打印($changedValue changed!”);
}
}

我对这个问题也有同感。
我无法在我的软件包中使用“dart:mirrors”,因此请使用以下选项:

String s = new Symbol('hi').toString();
s = s.substring(8,pn.length-2);
看起来很糟糕,但它完成了一些工作。不过可能存在性能问题

编辑:
`机会是伟大的东西,在缩小的JS中被打破。非常沮丧!’作者:Günter Zöchbauer 我没有想到这一点,谢谢。
即使它现在起作用,将来也有可能损坏,所以我想最好避免使用“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`

机会是巨大的,在缩小的JS中会出现中断。非常沮丧!据我所知,
Symbol
而不仅仅是
String
的全部目的是防止它在缩小损坏标识符名称时中断。@Günter Zöchbauer嗯,谢谢。这可能意味着镜像有一个内部符号到字符串转换表PRESS在编译时巧妙地创建,或者缩小之前的方法名称可以从缩小之后的名称计算出来。我现在将深入研究镜像…我不知道细节。我猜
dart2js
会对它们进行不同的处理,这样关系就不会断开。很棒但不稳定,并为html dart和镜像的捆绑包添加额外的兆字节目前不支持颤振((