2012-04-16 11 views
10

मैं सी # पृष्ठभूमि से एफ # में आया हूं। अब तक मैंने सरल कार्यक्रम लिखे हैं और एफ # इंटरैक्टिव में काफी समय बिताया है।एफ # की "हैलो, दुनिया" 2 एफएस फाइलों के साथ

मैं दो .fs फ़ाइलों के साथ एक वीएस एफ # प्रोजेक्ट बनाने में फंस गया हूं।

नमूना कोड:

// part 1: functions 
let rec gcd (a : uint64) (b : uint64) = 
    if b = 0UL then a 
    else gcd b (a % b) 

// part 2: main() 
let a, b = (13UL, 15UL) 
do printfn "gcd of %d %d = %d" a b (gcd a b) 

मैं इतना है कि Program.fs कोड मैं काम कर रहा हूँ और Alg होते हैं, दो .fs फ़ाइलें, अर्थात्, Alg.fs और Program.fs करना चाहते हैं एल्गोरिदम वाले .fs।

कदम उठाए गए:
मैंने दो फाइलें बनाई हैं। कंपाइलर ने एक त्रुटि दी: Files in libraries or multiple-file applications must begin with a namespace or module declaration, e.g. 'namespace SomeNamespace.SubNamespace' or 'module SomeNamespace.SomeModule'

मैंने module Program और module Alg डाला है। अनुपालन कार्यक्रम प्रोग्राम.एफएस को पूरी तरह से Alg.fs से केवल कोड निष्पादित करता है ...

मैं विजुअल स्टूडियो 2010 में F # 2.0 का उपयोग कर रहा हूं।
पीएस मैंने googled और some posts की जांच की है, और modules पर प्रलेखन पढ़ा है और पूछने से पहले रिश्तेदार देखा।

+9

क्या प्रोग्राम में आखिरी फाइल Program.fs है? यदि नहीं, तो आप [इस लेख को एमएसडीएन पर पढ़ना चाहते हैं] (http://msdn.microsoft.com/en-us/library/dd402151.aspx)। – Daniel

+1

तथ्य यह है कि चीजों का उपयोग करने से पहले घोषित किया जाना चाहिए शायद भाषाओं के आदी लोगों (सी #) के लिए बड़े ठोकर वाले ब्लॉक में से एक है जहां चीजों को आगे घोषित किया जा सकता है। –

उत्तर

21

ऐसा लगता है कि यह एक ऑर्डर-ऑफ-द-इन-द-प्रोजेक्ट इश्यू है। अंतिम फ़ाइल एंट्री पॉइंट ("मुख्य विधि") है, ऐसा लगता है कि आपके पास Alg.fs आखिरी है, और आपको Last.fs की आवश्यकता है। आप वीएस समाधान एक्सप्लोरर में राइट-क्लिक संदर्भ मेनू के माध्यम से उन्हें फिर से ऑर्डर कर सकते हैं।

4

वहाँ कम से कम तीन अलग-अलग चीज़ें यहाँ पर देखा जा करने की आवश्यकता है:

  1. @Brian से उल्लेख किया है, स्रोत नियंत्रण फ़ाइलों का आदेश भी संकलन आदेश है। यह एफ # में महत्वपूर्ण है जहां टाइप अनुमान का भारी उपयोग किया जाता है। सुनिश्चित करें कि Alg.fs आपकी विजुअल स्टूडियो फ़ाइल सूची में Program.fs से पहले आता है (इसे आजमाएं: Program.fs का चयन करें और Alt+Down Arrow दबाएं जब तक कि यह नीचे न हो)।

  2. के बाद से Alg.fs और Program.fs मॉड्यूल में अब कर रहे हैं, तो आप अपने बाइंडिंग (open Alg) तक पहुँच प्राप्त या Alg पर [<AutoOpen>] विशेषता जोड़ने के लिए वास्तव में Program में Alg मॉड्यूल को खोलने के लिए की जरूरत है।

  3. जैसा कि @ डैनियल कहते हैं, अंतिम समस्या प्रोग्राम के प्रवेश बिंदु की परिभाषा हो सकती है। शीर्ष स्तर बाध्यकारी पर आपको [<EntryPoint>] विशेषता की आवश्यकता है जो अंतिम फ़ाइल में अंतिम कार्य भी है। वैकल्पिक रूप से, यह आखिरी फाइल में आखिरी बाध्यकारी के लिए डिफ़ॉल्ट है, बस सुनिश्चित करें कि इसमें सही हस्ताक्षर है (डैनियल का लिंक देखें)।

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