2012-11-08 14 views

答えて

8

あなたはMirrorsで達成することができますいくつかのものがあります。あなたが疑問に思う

import 'dart:mirrors'; 

class Page { 
    var name; 

    method() { 
    print('called!'); 
    } 
} 

void main() { 
    var page = new Page(); 

    var im = reflect(page); 

    // Set values. 
    im.setField("name", "some value").then((temp) => print(page.name)); 

    // Call methods. 
    im.invoke("method", []); 
} 

場合、imは、基本的にpageインスタンスを反映InstanceMirror、次のとおりです。

はここでクラスの値を設定するとどのように動的にメソッドを呼び出す方法の例です。 Is there a way to dynamically call a method or set an instance variable in a class in Dart?

6

Dart Mirror APIを使用してそのようなことを行うことができます。ミラーAPIは完全に今実装されますが、ここで、それは仕事ができる方法ですされていません。

import 'dart:mirrors'; 

class Page { 
    String name; 
} 

main() { 
    final page = new Page(); 
    var value = "value"; 

    InstanceMirror im = reflect(page); 
    im.setField("name", value).then((_){ 
    print(page.name); // display "value" 
    }); 
} 
+1

'Futures.wait()'の呼び出しはあまり意味がありません。それを省略することができ、結果は同じです。 'Futures.wait()'は、与えられたアクションが完了したときに完了する 'Future'を返します。したがって、正しく機能するためには' .then() 'を書く必要があります。もちろん、操作は非同期であるため、運がうまくいきます:) –

+0

ご意見ありがとうございます。私は将来の使用法については新しいので、私は 'await'提案と混同しています。www.dartbug.com/104 –

0

あなたが例えばSerializable

使用することができます:

import 'package:serializable/serializable.dart'; 

@serializable 
class Page extends _$PageSerializable { 
    String name; 
} 

main() { 
    final page = new Page(); 
    var attribute = "name"; 
    var value = "value"; 

    page["name"] = value; 
    page[attribute] = value; 

    print("page.name: ${page['name']}"); 
} 
関連する問題