यदि मैं यह मान वर्ग है:इन मामलों में, स्कैला मूल्य वर्ग "बॉक्सिंग" होगा, है ना?
class ActionId(val value: Int) extends AnyVal
फिर, नीचे दिए सभी उदाहरणों में, एक वस्तु मूल्य वर्ग के लिए आवंटित किया जाएगा?
एक समारोह है कि एक मूल्य वर्ग रिटर्न - (सही यह नहीं बस एक सादे 32 बिट पूर्णांक पर unwrapped किया जाएगा, यह "बॉक्सिंग" जाएगा?) - मूल्य वर्ग गुंजाइश बच निकलता है और होगा इसलिए "बॉक्सिंग" हो?
def someFunction(): ActionId = { ... return ActionId(123) }
एक समारोह है कि एक मूल्य वर्ग के सदस्य साथ देता है एक वस्तु - मूल्य वर्ग गुंजाइश निकल जाता है और इस कारण "बॉक्सिंग" किया जाएगा?
case class Post(id: ActionId, ...) { ... } def someFunction(): Post = { ... val somePost = Post(ActionId(123), ...) // ActionId will be "boxed", right? return somePost }
भी अगर एक मूल्य वर्ग के सदस्य के साथ वस्तु नहीं लौटे (वास्तव में गुंजाइश से बच नहीं करता है), मूल्य वर्ग अभी भी "बॉक्सिंग" हो जाएगा, जब यह एक के रूप में इस्तेमाल किया जाता है इस उदाहरण में
Post
कक्षा में किसी अन्य वर्ग के सदस्य (एक क्षेत्र के रूप में)?def anotherFunction() { ... val somePost = Post(ActionId(123), ...) // "Boxed" here too, right? // ... do something with somePost // But don't: return somePost // However some *other* similar functions *do* return `somePost` — so // class `Post` must be able to box the ActionId? Hence it's boxed (above)? }
इस से संबंधित है this answer है, जो कहता है कि जब मूल्य वर्ग गुंजाइश बच नहीं करता है, यह प्रभावी रूप से inlined जा रहा है। यह अधिक जानकारी के लिए स्केल इम्प्रूवमेंट प्रोसेस दस्तावेज़ SIP-15 को संदर्भित करता है। हालांकि जहां तक मैं एसआईपी -15 को बता सकता हूं वास्तव में यह उल्लेख नहीं करता है कि दायरे से बचने वाले एक मूल्य वर्ग के उदाहरण को "बॉक्सिंग" किया जाएगा। लेकिन मुझे लगता है कि यह उचित लगता है कि इसे "बॉक्सिंग" होना होगा। (एसआईपी स्पष्ट रूप से क्यों नहीं बताती है कि अगर यह भाग जाए तो इसे बॉक्स किया जाएगा?)
क्या आप सरणी से निपटने के दौरान सिंटैक्टिक ओवरहेड को कम करने के लिए लाइब्रेरी समर्थन की कल्पना कर सकते हैं? – ziggystar
@ziggystar - ठीक है, अभी सिंटैक्टिक ओवरहेड को कम करने वाली हर चीज बाइटकोड ओवरहेड को बढ़ाती है। तो यह खेलना एक मुश्किल खेल है। जब यह मायने रखता है, तो आपके पास एक वैल्यू क्लास हो सकती है जो सरणी को लपेटती है और आपके लिए काम करती है (बहुत कम सिंटैक्टिक ओवरहेड के साथ), लेकिन मुझे एक छोटी सी फैक्ट्री बनाने का कोई तरीका नहीं है जो एक मूल्य वर्ग को संबंधित सरणी उत्पन्न करता है मूल्य वर्ग अंततः मैक्रोज़ वहां पहुंच जाएगा, मुझे लगता है। –
@RexKerr तो क्या इसका मतलब यह है कि डेटा संरचनाओं के अंदर कोई मूल्य वर्ग नहीं है? दूसरे शब्दों में, सूची, मानचित्र, आदि हमेशा बॉक्स किए गए वर्ग को तुरंत चालू करेंगे? –