5

Dart クラスのメソッドを「フェッチ」する必要があります。

これどうやってするの?

そして、メソッドを呼び出せるようにしたいです。

例を見てもいいですか?

4

3 に答える 3

3

コピーして貼り付け可能な簡単なコード サンプルを次に示します。

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
于 2012-11-03T11:21:11.527 に答える
1

以下に基本的な例を示します。

(注: これには (非常に) 最新バージョンの SDK が必要です。これは、Dart Editor バージョン 0.2.1_r14167、Dart SDK バージョン 0.2.1.2_r14167、2012 年 11 月 2 日で行われました)。

この例を提供してくれた Google Dart チームの 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,[]);
  });

}
于 2012-11-03T01:59:44.837 に答える