2012-11-03 15 views

答えて

3

ここで簡単にコピーpasteableコードサンプルです:

import 'dart:mirrors'; 
import 'dart:io'; 

main() { 
    var im = reflect(new File('test')); // Retrieve the InstanceMirror of some class instance. 
    im.type.methods.values.forEach((MethodMirror method) => print(method.simpleName)); 
} 

出力は次のとおりです。

existsSync 
_delete 
exists 
directory 
_getDecodedLines 
readAsTextSync 
readAsBytesSync 
readAsLinesSync 
_directory 
throwIfError 
lastModifiedSync 
readAsLines 
open 
_ensureFileService 
deleteSync 
delete 
_exists 
length 
openInputStream 
create 
_create 
readAsText 
_openStdioSync 
openOutputStream 
_fullPath 
_lastModified 
fullPathSync 
readAsBytes 
lastModified 
_openStdio 
_open 
openSync 
lengthSync 
directorySync 
fullPath 
createSync 
_lengthFromName 
+1

ClassMirror 'methods'プロパティは含まれなくなりました。今は 'instanceMembers'と '宣言'を持っています。 'instanceMembers'は古い 'methods'プロパティの同義語ですか? – ringstaff

1

は、基本的な例である:

(注意:あなたは(非常に)このためのSDKの最新のバージョンまで、これはダートEditorバージョン0.2.1_r14167で行われていた持っていることになるでしょう、ダートSDKのバージョン0.2.1.2_r14167 2012年11月2日)

この例を提供してくれたGoogleダーツチームのGiladに感謝します。私はちょうど私が確かに言うことができるすべてのことです...メソッド名(ないマップ)のリストをフェッチし、メソッドを呼び出すための「ヘルパー関数」のカップルを書いたリフレクションに関する

#import('dart:mirrors'); 

class MyClass { 
    String _test; 

    String get test  => _test; 
    set  test(String paramVal) => _test = paramVal; 

    void my_method() { 
    } 

    void print_test(){ 
    print("test string is: ${_test}"); 
    } 

    MyClass(String test) { 
    _test = test; 
    } 

} 


main() { 

    MyClass myClass = new MyClass("Make my day, PUNK."); 

    myClass.print_test(); 

    //ClassMirror myClassMirror = reflect(myClass).type; 

    InstanceMirror myClassInstanceMirror = reflect(myClass); 

    ClassMirror MyClassMirror = myClassInstanceMirror.type; 

    Map<String, MethodMirror> map = MyClassMirror.methods; 

    print("map = ${map}"); 

    map.values.forEach((MethodMirror mm){ 
    myClassInstanceMirror.invoke(mm.simpleName,[]); 
    }); 

} 
0

それは今働く。このようにしないと技術的な理由が考えられますが、私の場合、これは複雑な環境では実行されません。しかし、私は彼らがうまくいけば、誰もが対処したくない細部について隠蔽していると思う。ここで

は、ヘルパー機能を持つとせずに機能するデモです:

#import('dart:mirrors'); 

class MyClass { 
    String _test; 
    String get test    => _test; 
    set  test(String paramVal) => _test = paramVal; 
    void my_method1(){print("in method1");} 
    void my_method2(){print("in method2");} 
    void print_test(){ 
    print("test string is: ${_test}"); 
    } 
    MyClass(String test) { 
    _test = test; 
    } 
} 

//Helper Methods 
InstanceMirror hMr; 
List REFLECT_methods(Object myClass) {hMr=reflect(myClass);return(hMr.type.methods.values);} 
REFLECT_invoke(MethodMirror mm){hMr.invoke(mm.simpleName, []);} 

main() { 

    MyClass myClass = new MyClass("Make my day, PUNK."); 

    print("\n=======Using Raw Reflection================"); 
    InstanceMirror myClassInstanceMirror = reflect(myClass); 
    ClassMirror MyClassMirror = myClassInstanceMirror.type; 
    Map<String, MethodMirror> map1 = MyClassMirror.methods; 
    map1.values.forEach((MethodMirror mm){ 
    myClassInstanceMirror.invoke(mm.simpleName,[]); 
    }); 

    print("\n==========Using Helper functions============="); 
    List list2 = REFLECT_methods(myClass); 
    list2.forEach((method){ 
    REFLECT_invoke(method); 
    }); 
} 
関連する問題