2012-03-25 13 views
17

अपने स्रोत कोड पेड़ के भीतर संस्करण निर्दिष्ट करने के लिए सबसे अच्छा/सही अभ्यास क्या है? उदाहरण के लिए, मुझे स्रोत पेड़ के शीर्ष स्तर में VERSION फ़ाइल डालने और इसे "संस्करण" फ़ंक्शन पढ़ने के लिए प्राप्त करना है।हास्केल: स्रोत में संस्करण निर्दिष्ट करने के लिए सही अभ्यास?

कैबल फ़ाइल में एक संस्करण खंड है। क्या इसे "सहायता" या "संस्करण" फ़ंक्शंस द्वारा मेरे स्रोत से पढ़ना संभव है? एक स्थान में संस्करण निर्दिष्ट करने और इसे ग्लोबली उपलब्ध कराने का सही अभ्यास क्या है?

पीएस क्या Cabal लाइब्रेरी में कोई फ़ंक्शन है जो आपको कैबल फ़ाइल से किसी भी सेक्शन को खींचने और इसे आपके स्रोत में पेश करने की अनुमति देता है? तो मैं केवल कैबल फ़ाइल से संस्करण खंड खींच सकता था।

- अद्यतन -

Pathes_x मॉड्यूल के बारे में ज्ञान का एक अच्छा टुकड़ा के लिए आप थॉमस धन्यवाद। बस इसे जोड़ना चाहता था, जाहिर है, मुझे अपनी कैबल फ़ाइल में कुछ भी डालने की आवश्यकता नहीं है। सब कुछ बस इसके बिना काम करता है। मुझे जितना आवश्यक था उतना ही मुझे पैथस_एक्स आयात करना था। इसके अलावा, मुझे संस्करण डेटा प्रकार को उचित रूप से प्रारूपित/प्रिंट करने के लिए शोवर्सन फ़ंक्शन प्राप्त करने के लिए डेटा आयात करने की आवश्यकता है। तो अंत में मैं कुछ इस तरह मिलती है:

import Paths_kvman 
import Data.Version 

runVersion _ = putStrLn ("Version: " ++ (showVersion version)) 

अब, सभी मैं जरूरत कबाल फ़ाइल में संस्करण संख्या को बदलने के लिए मेरे स्रोत से अधिक यह सब propagade है। वास्तव में मुझे क्या चाहिए। धन्यवाद।

उत्तर

22

कैबल स्वचालित रूप से Paths_packagename नामक प्रत्येक पैकेज के लिए एक मॉड्यूल उत्पन्न करता है। बस इस पैकेज को आयात करें और version इसे निर्यात करने के मूल्य देखें।

संपादित करें: उदाहरण के लिए:

module Data.Blah where 

import Paths_t 

func :: IO() 
func = print version 

और एक उदाहरण चलाएँ:

> func 
Version {versionBranch = [0,1], versionTags = []} 

कबाल फ़ाइल के अपने Other-Modules खंड में Paths_packagename डाल करने के लिए सुनिश्चित करें।

+0

ऐसा करना चाहिए :) –

+0

वाह। मुझे पता नहीं था। –

+1

अच्छी टिप! "सप्ताह की कैबल टिप" के साथ ब्लॉग रखने के बारे में कैसे? मैं निश्चित रूप से सदस्यता लेता हूं। –

1

सर्वोत्तम अभ्यास संस्करण संख्या को अपनी कैबल फ़ाइल में रखना है, जैसा कि आपने पहले ही उल्लेख किया है।

मुझे किसी भी अच्छे प्रथाओं से अवगत नहीं है जिसके द्वारा आप संस्करण के बारे में सच्चाई का एक बिंदु बना सकते हैं, फिर भी संख्या को कैबल और आपके आवेदन दोनों में उपलब्ध कराएं।

मैं इन सामग्री के साथ स्रोतों में एक एकल फाइल Version.hs की सिफारिश करेंगे:

module Version 
where 
version :: String 
version = "3.14159" 

फिर आप, अगर आप की कामना की, स्क्रिप्ट के कुछ प्रकार इस नंबर के साथ कबाल फ़ाइल अद्यतन करने के लिए इस्तेमाल कर सकते हैं, लेकिन मैं डॉन यह नहीं पता कि इसे कैबल के भीतर से कैसे किया जाए।

यह रणनीति केवल एप्लिकेशन पैकेज के लिए काम करेगी; यदि आप लाइब्रेरी बना रहे हैं, तो आपको कुछ विचार देना होगा कि पदानुक्रमित मॉड्यूल के नामस्थान में आपके Version.hs जायेंगे।

पूरी तरह से, मुझे संदेह है कि गेम मोमबत्ती के लायक नहीं है।


पीएस संस्करण संख्या अपरिवर्तनीय होनी चाहिए, इसलिए आप एक मान चाहते हैं, एक समारोह नहीं।

+0

धन्यवाद नोर्मन, फ़ंक्शन द्वारा मेरा मतलब था कि जब मैं -h या -v स्विच निर्दिष्ट करता हूं तो मैं क्या कहता हूं। यह एक मूल्य प्रारंभिक है। लेकिन इस मूल्य को अंततः एक समारोह द्वारा बुलाया जाता है जो -v या -h स्विच करता है। सही? –

+1

@ r.sendecky, जब आपके पास कमांड लाइन स्विच होता है तो आप कुछ प्रकार की मोनैडिक एक्शन जैसे 'putStrLn $ "संस्करण करेंगे:" ++ Version.version' –

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