2013-12-07 2 views
10

मुझे लंबे समय तक एक सी # प्रोग्रामर होने के साथ जंग के साथ खेलने में बहुत मज़ा आता है लेकिन मेरे पास प्रतिबिंब के आसपास एक सवाल है।जंग में प्रतिबिंब संभव है, और यदि ऐसा है तो मैं कुछ तर्कों के साथ एक अज्ञात कार्य कैसे कर सकता हूं?

ठीक है, मुझे लगता है कि प्रतिबिंब, शायद मुझे इस मामले में प्रतिबिंब की आवश्यकता नहीं है, लेकिन जंग को दृढ़ता से टाइप किया गया है, मुझे संदेह है कि मैं करता हूं (मुझे निश्चित रूप से इसे अच्छे ओएल 'सी # में चाहिए, इसके सूती मोजे को आशीर्वाद दें)।

ठीक है, तो कहते हैं कि मैं इस स्थिति है:

fn invoke_an_unknown_function(hashmap::HashMap<~str, ~str> 
    /*, Something to denote a function I know nothing about goes here */) 
{ 
    // For each key in the hash map, assign the value 
    // to the parameter argument whose name is the key 
    // and then invoke the function 
} 

मैं ऐसा कैसे होगा? मुझे लगता है कि मुझे किसी प्रकार के MethodInfo में फ़ंक्शन के दूसरे तर्क के रूप में पास करने की आवश्यकता है और उसके बाद उन तर्कों को प्राप्त करने के लिए इसके साथ पोक करें जिनके नाम हैश मानचित्र में कुंजी है और मान असाइन करें लेकिन मैंने इसके लिए चारों ओर देखा

लेकिन उनमें से कोई भी वास्तव में पर जाने के लिए पर्याप्त मुझे दे आरंभ करने के लिए: प्रतिबिंब एपीआई और निम्न पाया। तो, मैं ऊपर बताए गए फ़ंक्शन को कैसे कार्यान्वित करूं?

+0

विशेष रूप से ऑफ़-साइट संसाधनों के लिए पूछे जाने वाले प्रश्न यहां विषय-वस्तु हैं। आपके द्वारा किए जा रहे विशिष्ट समस्या पर ध्यान केंद्रित करने के लिए अपने प्रश्न को दोबारा दर्ज करने का प्रयास करें ताकि कोई आपको अधिक विशिष्ट और विस्तृत उत्तर दे सके। – animuson

+2

जंग में अच्छी तरह से विकसित प्रतिबिंब क्षमताओं नहीं है। उन्हें ऐसा कुछ माना जाता है जिसे बड़े पैमाने पर उपयोग नहीं किया जाना चाहिए, और इस पर ध्यान दिए बिना कि क्या हमारे पास ऐसी कार्यक्षमता है या नहीं, यह निश्चित रूप से प्राथमिकता नहीं है। वर्तमान में, आप जो करने की कोशिश कर रहे हैं वह नहीं किया जा सकता है, और मुझे लगता है कि यह कहना उचित है कि 1.0 में यह भी नहीं होगा। –

+0

धन्यवाद @ChrisMorgan - मैं इसके लिए खोजना बंद कर दूंगा और सोच सकता हूं कि क्या मैं अपना लक्ष्य थोड़ा अलग तरीके से प्राप्त कर सकता हूं। – kmp

उत्तर

6

लक्षण कहीं और के लिए उपयोग किए जाने वाले प्रतिबिंब (एबी) की उचित मात्रा को लागू करने का अपेक्षित तरीका है।

trait SomeInterface 
{ 
    fn exposed1(&self, a: &str) -> bool; 
    fn exposed2(&self, b: int) -> int; 
} 

struct Implementation1 
{ 
    value: int, 
    hasFoo: bool 
} 

impl SomeInterface for Implementation1 
{ 
    fn exposed1(&self, a: &str) -> bool 
    { 
     self.hasFoo 
    } 

    fn exposed2(&self, b: int) -> int 
    { 
     self.value * b 
    } 
} 

fn test_interface(obj: &SomeInterface) 
{ 
    println!("{}", obj.exposed2(3)); 
} 

fn main() 
{ 
    let impl1 = Implementation1 { value: 1, hasFoo: false }; 
    test_interface(&impl1); 
} 
संबंधित मुद्दे

 संबंधित मुद्दे