2013-12-20 1 views
1

Невозможно понять, как переменная может быть функцией.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 переменная экземпляра (т. Е. Переменная-член) не является членом экземпляра? По крайней мере, в интерпретации библиотеки «дарт: зеркала».

ответ

2

Очевидно, что методы генерации и сеттера генерируются автоматически для публичных полей.

  • "Баз =": isSetter == истинный
  • "Баз": isGetter == истинный

Я также нашел final Map<Symbol, MethodMirror> instanceMembers

Цель состоит в том, чтобы захватить те элементы, которые составляют API экземпляра. Следовательно, поля не включаются, но включены геттеры и сеттеры, неявно введенные полями.

+0

Поля в Дарте - это методы, но не переменные? – mezoni

+0

Относительно вашего последнего изменения вашего ответа. Переменные экземпляра не являются членами экземпляра? – mezoni

+0

Нет, они ** являются ** не методами, но даже если вы не записываете их явно в код, то получатели и сеттеры генерируются для них (в дополнение к полям), а экземпляры-члены не возвращают только методы в качестве ссылочной справки говорит ясно. –