2010-04-09 4 views
12

के बराबर है क्या कोई एफ # eval के बराबर है? मेरे इरादे मेरे ऐप एक फ़ाइल से एक छोटा सा कोड नमूना लोड और अनिवार्य रूप सेएफ # इवल

let file = "c:\mysample" 
let sample = loadFromFile file 
let results = eval(sample) 

मैं एफ # करने के लिए नए और सीमाओं के कुछ पता लगाने के लिए इससे पहले कि मैं यह एक परियोजना के लिए लागू की कोशिश कर रहा हूँ है।

आप

+0

http://stackoverflow.com/questions/372043/how-can-evaluate-an-expression-stored-as-a-string-in-f – Brian

+0

का संभावित डुप्लिकेट क्या आप उस से F # कोड लोड करना चाहते हैं फाइल? – phimuemue

+0

मुझे लगता है कि यह पोस्ट थोड़ा अलग सवाल पूछता है (हालांकि तकनीकी रूप से संबंधित)। ब्रायन द्वारा उल्लिखित एक साधारण अभिव्यक्ति के बारे में पूछता है, जबकि यह एक फाइल को संकलित/मूल्यांकन करने के बारे में पूछता है। तकनीकी रूप से, यह वही बात हो सकती है, लेकिन शायद यह काफी अलग उपयोग केस है। –

उत्तर

13

धन्यवाद कोई समारोह है कि आप इस सीधे ऐसा करने की अनुमति होती है। हालांकि, जब आप प्रोग्रामिंग रूप से एक एफ # स्रोत फ़ाइल संकलित करना चाहते हैं, तो आप अपने आवेदन से एफ # कंपाइलर का आह्वान कर सकते हैं। ऐसा करने का सबसे आसान तरीका एफ # कोडडॉम प्रदाता का उपयोग करना है, जो एफ # पावरपैक (FSharp.Compiler.CodeDom.dll असेंबली में) के हिस्से के रूप में उपलब्ध है। हालांकि, ध्यान दें कि आपको उपयोगकर्ता की मशीन पर F # कंपाइलर स्थापित करने की आवश्यकता है।

संकलक चलाने के लिए इस तरह मोटे तौर पर दिखेगा कोड:

open Microsoft.FSharp.Compiler.CodeDom 

let provider = new FSharpCodeProvider() 
let compiler = provider.CreateCompiler() 

let parameters = new CompilerParameters 
    (GenerateExecutable = true, OutputAssembly = "file.exe") 
let results = icc.CompileAssemblyFromFile(parameters, "filename.fs") 

एक बार जब आप एक विधानसभा में स्रोत फ़ाइल संकलन, आप नेट प्रतिबिंब का उपयोग कर विधानसभा लोड और कुछ विशेष समारोह चलाने की आवश्यकता होगी या असेंबली से कक्षा (उदाहरण के लिए आप कुछ विशेष नाम के साथ एक समारोह की तलाश कर सकते हैं या कुछ विशेषता के साथ चिह्नित)।

(अतिरिक्त नोट, कोटेशन का उपयोग कर के रूप में या related SO question में उल्लेख किया है एक विकल्प हो सकता है, तो अपने स्रोत कोड अपेक्षाकृत आसान होता है अपनी खुद की दुभाषिया लेखन, लेकिन के रूप में शायद नहीं यदि आप एफ # की पूरी शक्ति का समर्थन करना चाहते हैं)

+0

मैं अभी भी अपने सिर को कोटेशन और मेटाप्रोग्रामिंग के आसपास सामान्य रूप से प्राप्त करने की कोशिश कर रहा हूं। मुझे पूरा यकीन है कि यह कार्यक्षमता है जिसकी मुझे आवश्यकता नहीं होगी - लेकिन अलग-अलग फ़ाइलों में डेटासेट के माध्यम से कुछ टेस्ट केस प्रदान करने में सक्षम होने के बारे में सोच रहा था जिसे मैं गतिशील रूप से लोड कर सकता था। कोडडॉम (यूघ - याद रखें कि 2004 में सीआई # में उस सुअर को दूर करना) निश्चित रूप से चाल करेगा। आपकी प्रतिक्रिया के लिए धन्यवाद। – akaphenom

+2

** कोडडॉम ** बहुत ही सुरुचिपूर्ण तकनीक नहीं है, लेकिन जब आपको केवल एफ # कंपाइलर का आह्वान करने की आवश्यकता होती है तो यह चाल चलनी चाहिए (कोडडॉम का उपयोग करके एफ # कोड उत्पन्न करना सिद्धांत में भी संभव है, लेकिन इसमें कुछ सीमाएं हैं)। ** एफ # में कोटेशन ** मुख्य रूप से कुछ अलग निष्पादन पर्यावरण (एसक्यूएल के रूप में, क्लाइंट-साइड पर जावास्क्रिप्ट के रूप में, जीपीयू कोड के रूप में) में एफ # में लिखे गए कोड को निष्पादित करने के लिए उपयोग किए जाते हैं, इसलिए जब आपके पास कुछ प्रोग्राम होता है तो वे वास्तव में उपयोगी नहीं होते हैं एक स्ट्रिंग के रूप में। –