2013-02-17 1 views

ответ

8

Python dir() function, используется, чтобы узнать, какие имена определяет модуль.

Мы можем использовать Mirrors и написать эквивалентную функцию самостоятельно (или по крайней мере очень похожи):

import 'dart:mirrors'; 

List<String> dir([String libraryName]) { 
    var lib, symbols = []; 

    if (?libraryName) { 
    lib = currentMirrorSystem().libraries[libraryName]; 
    } else { 
    lib = currentMirrorSystem().isolate.rootLibrary; 
    } 

    lib.members.forEach((name, mirror) => symbols.add(name)); 

    return symbols; 
} 

Теперь вот пример:

class Hello {} 

bar() => print('yay'); 

main() { 
    var foo = 5; 

    print(dir()); // [main, bar, Hello, dir] 
} 

Или указать библиотеку:

print(dir('dart:mirrors')); 

[MirroredError, TypeMirror , ObjectMirror, _LazyLibraryMirror, TypeVariableMirror, MirrorException, ClassMirror, MirrorSystem, _LocalMirrorSystemImpl, _LocalVMObjectMirrorImpl, DeclarationMirror, _LazyTypeMirror, _LocalClosureMirrorImpl, mirrorSystemOf, _LazyFunctionTypeMirror, _filterMap, MirroredCompilationError, _Mirrors, _LocalClassMirrorImpl, _LocalInstanceMirrorImpl, _LocalTypedefMirrorImpl, _LocalFunctionTypeMirrorImpl, отражают, MethodMirror, _LocalVariableMirrorImpl, LibraryMirror, _LocalIsolateMirrorImpl, FunctionTypeMirror, _LocalLibraryMirrorImpl, Зеркало, _LocalObjectMirrorImpl, _LocalMirrorImpl, _makeSignatureString, _LocalTypeVariableMirrorImpl, комментарий, MirroredUncaughtExceptionError, _LocalParameterMirrorImpl, _LazyTypeVariableMirror, TypedefMirror, VariableMirror, IsolateMirror, currentMirrorSystem, _dartEscape, _LocalMethodMirrorImpl, Кло sureMirror, VMReference, ParameterMirror, InstanceMirror, _isSimpleValue, SourceLocation]

Это буквально говорит, что было определено в конкретной библиотеке (модуль). Теперь могут быть некоторые отличия от функции Python, которая также, похоже, сортирует имена, но это должно дать вам начало.