Dart 虚拟机不保证变量不能是可变的,但它可能是一个函数



无法理解变量如何成为函数。

示例代码。

import 'dart:mirrors';
class Foo {
 int baz;
}
void main() {
  var name = "baz=";
  var typeMirror = reflectClass(Foo);
  for(var member in typeMirror.instanceMembers.values) {
    print(MirrorSystem.getName(member.simpleName));
    if(MirrorSystem.getName(member.simpleName) == name) {
      if(member is MethodMirror) {
        print("================================");
        print("Info about METHOD $name");
        print("isSetter: ${member.isSetter}");
        print("isVariable: false, because it is a method");
        print("================================");
      }
    }
  }
}
==
hashCode
_identityHashCode
toString
noSuchMethod
runtimeType
_cid
_leftShiftWithMask32
baz
baz=
================================
Info about METHOD baz=
isSetter: true
isVariable: false, because it is a method
================================

我在维基百科中找到了这个信息。

  • 在面向对象的编程中,实例变量是在类中定义的变量(即成员变量)。

  • 在面向对象的编程中,成员变量(有时称为成员字段)是与特定类关联的变量,并且其所有方法都可以访问。

我还问另一个问题。

在面向对象的编程语言Dart中,实例变量(即成员变量)不是实例的成员吗?至少在"飞镖:镜子"库的解释中。

显然,getter 和 setter 方法是为公共字段自动生成的。

  • "baz=": isSetter == true
  • "baz": isGetter == true

我还找到了最终的 Map<Symbol、MethodMirror> instanceMembers

目的是捕获构成实例 API 的成员。因此,字段不包括在内,但包括字段隐式引入的 getter 和 setter。

最新更新