dart - 带有私有(private)标识符参数的符号

标签 dart symbols dart-editor dart-analyzer

我想创建一个与私有(private) MethodMirror 的简单名称相同的符号。然而,Symbol 的文档指出 new Symbol 的参数必须是有效的公共(public)标识符。如果我尝试创建一个 const Symbol('_privateIdentifier') dart 编辑器通知我,对该常量表达式的求值将引发异常 - 尽管程序运行良好,并且我可以在没有任何异常的情况下使用它问题。

void main(){
  //error flagged in dart editor, though runs fine.
  const s = const Symbol('_s');
  print(s); //Symbol("_s");
}

镜像系统似乎使用了符号。

import 'dart:mirrors';
class ClassA{
  _privateMethod(){}
}

void main(){
  var classMirror = reflect(new ClassA()).type;
  classMirror.declarations.keys.forEach(print);
  //Symbol("_privateMethod"), Symbol("ClassA")
}

dart 编辑器中的文档/错误标记是否是由于过时的 dart 分析器而导致的遗留错误?或者将来有计划执行这一公共(public)要求吗?是否有另一种方法来创建一个唯一的识别符号,该符号将被缩小为与声明的简单名称相同的符号

最佳答案

如果它没有抛出,那么虚拟机在 const Symbol 构造函数中存在错误。

问题是“_s”在没有说明它属于哪个库的情况下无法识别私有(private)变量。由于这个原因,符号构造函数有第二个参数采用 LibraryMirror ,并且传入私有(private)名称而不传入镜像应该抛出异常。 如果不回避 const 构造函数的要求(不执行代码!),在 const 构造函数中很难做到这一点,这可能就是 VM 不处理它的原因。它需要在编译器级别进行特殊处理。

您还会发现 const Symbol('_s')#_s 不同。后者为当前库创建一个私有(private)符号,前者(如果运行)创建一个名为“_s”的非私有(private)符号,这并不是真正有用。例如 print(identical(#_s, const Symbol('_s'))); 打印 false。

关于dart - 带有私有(private)标识符参数的符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29113434/

相关文章:

flutter - 在 Dart 中运行所有单元测试

flutter - 在Dart中,如何将函数传递为返回Future的参数

html - HTML 中的 OK 或 ACCEPTED 符号?

common-lisp - 在 Lisp 中从字符串创建变量名

dart - 视频标记在Dartium中不显示内容

dart - 作为Javascript内联聚合物元素运行

dart - 在第一页加载时,我如何从指令 (AngularDart) 中知道当前路线是什么?

dart - 如何在 Flutter 上创建多个 Shared-Preferences?

php - 在数据库中使用@符号

php - 如何将 Dart 项目与 PHP 相结合?