2012-11-08 17 views
5

में डायनामिक क्लास विधि आमंत्रण Dynamic class method invocation in PHP पर प्रश्न की तरह मैं इसे डार्ट में करना चाहता हूं।डार्ट

var = "name"; 
page.${var} = value; 
page.save(); 

क्या यह संभव है?

+0

सुनिश्चित करें हरे चेकमार्क उन जवाब से एक के लिए

भी एक और सवाल है! वे दोनों सही हैं। –

उत्तर

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 एक InstanceMirror, जो मूल रूप से page उदाहरण दर्शाता है:

यहाँ वर्गों के मूल्यों को निर्धारित करने के लिए कैसे और कैसे गतिशील तरीकों कॉल करने के लिए एक उदाहरण है। Is there a way to dynamically call a method or set an instance variable in a class in Dart?

6

आप ऐसी चीज करने के लिए Dart Mirror 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()' एक 'भविष्य' देता है जो दिए गए कार्यों को पूरा करता है, इसलिए, आपको इसे सही ढंग से काम करने के लिए '.then() 'लिखना होगा। बेशक यह अब भाग्य से काम करता है क्योंकि ऑपरेशन गैर-एसिंक हो जाता है :) –

+0

आपकी टिप्पणी के लिए धन्यवाद। मैं भविष्य के उपयोग के लिए नया हूं और मैं 'प्रतीक्षा' प्रस्ताव 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']}"); 
} 
संबंधित मुद्दे