2012-10-19 7 views
7

सामान्य वस्तुओं पर, मैं क्या कर सकते हैं निम्नलिखित:पैकेज ऑब्जेक्ट्स पर शॉर्टेंड फॉर्म में क्यों लागू नहीं किया जा सकता है?

object A { 
    def apply = "!" 
} 
A() // "!" 

लेकिन पैकेज वस्तुओं पर, यह काम नहीं करता:

package object A { 
    def apply = "?" 
} 
A.apply // "?" 
A() // compile error 
    // error: package A is not a value 

वहाँ कुछ बुनियादी सीमा है? या यह सिर्फ एक कार्यान्वयन सीमा है, जिसे मैं संकलक को थोड़ा सा बदलकर ठीक कर सकता हूं?

+0

आप इसके साथ क्या करना चाहते थे? क्यों न केवल सामान्य वस्तुओं का उपयोग करें? –

+1

@ सेर्गेई पैसिचेंको - उदाहरण के लिए, कोडबेस में आयात किए बिना कुछ विधि कॉल करने के लिए - यदि आपके पास "लागू" विधि के साथ पैकेज ऑब्जेक्ट "बंदर" है, तो आप किसी भी स्थान पर "बंदर()" कर पाएंगे। यह एक उदाहरण है - लेकिन मुझे भी रूचि है कि क्यों पैकेज ऑब्जेक्ट सामान्य वस्तुओं से अलग हैं। – Rogach

उत्तर

7

एक ही तरीका है आप कर सकते हैं इसके बिना लागू यह है:

A.`package`() 

इसका कारण यह है A एक मूल्य या एक विधि है, और भाषा विनिर्देश कहा गया है कि f() मान्य होने के लिए, f है निरूपित नहीं है एक विधि प्रकार या एक मान प्रकार apply विधि के साथ। मुझे नहीं पता कि संकलक इसे बदलने के लिए कितनी आसानी से "ट्विक" कर सकता है, लेकिन मुझे संदेह है कि यह प्रयास के लायक है। यदि आप ऐसी लंबाई में जाना चाहते हैं, तो बस अपनी विधि को Predef पर जोड़ना आसान होगा।

+0

मैं 'प्रीडिफ' में कोई तरीका कैसे जोड़ सकता हूं? – Madoc

+0

@ मैडोक: आपको मानक लाइब्रेरी का स्रोत कोड मिलता है, अपनी विधि जोड़ें, और इसे संकलित करें –

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