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

时间:2013-12-20 16:19:40

标签: reflection dart dart-mirrors

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

示例代码。

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中,实例变量(即成员变量)不是实例的成员?至少在“dart:mirrors”库的解释中。

1 个答案:

答案 0 :(得分:2)

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

  • “baz =”:isSetter == true
  • “baz”:isGetter == true

我还找到了final Map<Symbol, MethodMirror> instanceMembers

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