2010-07-26 4 views
5

मैं एफ # में एक गेम ऑब्जेक्ट डिज़ाइन कर रहा हूं। सी ++ में, मैं कक्षाओं को ग्राफिकल पहलू, भौतिक आदि का प्रतिनिधित्व करने के लिए गतिशील मूल्यों का प्रतिनिधित्व करता हूं, और उसके बाद उन कक्षाओं के उदाहरण को GameObject में जोड़ता हूं। मैं म्यूटेबल प्रकारों के साथ एफ # में एक ही डिजाइन का उपयोग कर सकता हूं, लेकिन मैं सब कुछ अपरिवर्तनीय रखने की कोशिश कर रहा हूं। इसलिए यदि मैंने एक ही डिजाइन का उपयोग किया तो मैं प्रत्येक फ्रेम की हजारों बड़ी वस्तुओं को पुनर्निर्माण कर रहा हूं, और संभवतः आवंटित सभी सीपीयू समय व्यतीत करता हूं।अपडेट किए जाने वाले टुकड़ों के साथ एक बड़े अपरिवर्तनीय प्रकार को परिभाषित करने का सही तरीका?

क्या कोई तरीका है कि मैं एक प्रकार को परिभाषित कर सकता हूं जहां मैं किसी अन्य ऑब्जेक्ट के मूल्यों से लिंक कर सकता हूं और आवंटन में कटौती करने के लिए नए आपूर्ति कर सकता हूं? वास्तव में

let box = ... 
... 

let changedBox = {box with 
       graphics = { box.graphics with colour = blue} } 

उत्तर

5

हाँ,:

जैसे एक बॉक्स का रंग बदलने के, मैं एक नया ग्राफिक्स टुकड़ा के साथ पुराने बॉक्स की स्मृति उपयोग करना चाहते हैं, और एक नया रंग के साथ पुराने ग्राफिक्स टुकड़ा की स्मृति का उपयोग करें। यह मानते हुए कि "बड़ी वस्तु" वास्तव में कई छोटी वस्तुओं का एक संदर्भ ग्राफ है, फिर सामान्य "एक अपरिवर्तनीय अद्यतन" बस एक या दो नई छोटी वस्तुओं को बनाता है और शेष के लिए वही पुराना संदर्भ देता है।

उदाहरण के लिए, यदि व्यक्ति का नाम और पता है, और पते में स्ट्रीट और सिटी और स्टेट और ज़िप है, और मुझे किसी व्यक्ति के ज़िप को अपडेट करने की आवश्यकता है, तो मुझे केवल स्पैनिंग पेड़ के लिए नई ऑब्जेक्ट्स बनाने की आवश्यकता है जड़ से ज़िप तक। उदाहरण देखें this blog में लाल-काले रंग के आरेख। व्यक्ति के उदाहरण में, नाम, सड़क, शहर और राज्य वस्तुओं का पुन: उपयोग किया जाएगा, लेकिन ज़ीप एक नई वस्तु होगी, और पता एक नई वस्तु होगी (क्योंकि इसमें नया ज़िप शामिल है), और व्यक्ति होगा एक नई वस्तु (क्योंकि इसमें नया पता है)। क्या इस का कोई मतलब निकलता है?

+2

यह समझ में आता है। मेरी समस्या यह थी कि मैंने सोचा कि वस्तुओं का पुन: उपयोग करने के बजाय कॉपी किया जाएगा। धन्यवाद महोदय। इसके अलावा मैं आपके ब्लॉग को पढ़ने का आनंद लेता हूं, यही वजह है कि मैं एफ # में आया हूं :) – Patrick

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