2015-11-19 8 views
5

इस प्रश्न को और स्पष्ट करने के लिए संपादित करें, स्पष्टीकरण के लिए नीचे टिप्पणियां देखें।स्कैला शीर्ष स्तर पैकेज ऑब्जेक्ट

तो यह मेरे लिए बहुत स्पष्ट लगता है, लेकिन ऐसा लगता है कि यह इस तरह से काम नहीं करता है, लेकिन अगर मेरे पास स्कैला पैकेज ऑब्जेक्ट है और यह मेरे पैकेज के शीर्ष स्तर पर है। com.company की तरह कहते हैं और ऐसा लगता है नीचे

package com 

package object company{ 
    val something = "Hello world." 
} 

अब यह मेरे लिए प्रतीत होता है कि इस परिवर्तनीय नीचे धीरे-धीरे और यह बच्चे संकुल है से सुलभ हो जाएगा, लेकिन वे नहीं कर रहे हैं कुछ आसान है।

// 2 Layers down instead of the direct child 
package com.company.app 

import com.company._ 

object Model extends App { 
    println(something) 
} 

यह केवल आयात, जो ठीक है के साथ काम करने लगता है, लेकिन मैं पैकेज वस्तु के साथ उम्मीद कर रही थी कि मैं पूरे पैकेज के लिए शीर्ष स्तर बातें निर्धारित कर सकते हैं और इसे नीचे ट्रिकल है, लेकिन ऐसा नहीं है कि है ? क्या इसके लिए काम करने का कोई तरीका है? मैं इसमें किसी अंतर्दृष्टि की सराहना करता हूं।

+1

आप किस स्कैला संस्करण का उपयोग कर रहे हैं? मैं आयात के बिना 'com1pany.Model' को' 2.11.7' पर संकलित करने में सक्षम था – Odomontois

+2

यह मेरे लिए काम करता है (बिना 'आयात' के), जैसा कि अपेक्षित है ... –

+0

वैसे मैं वास्तव में एक और परत नीचे हूं, इसलिए मेरा पैकेज ऑब्जेक्ट है 'com.company' लेकिन मेरा वास्तविक कोड' com.company.model.ClassFile 'जैसा कुछ है और यह काम नहीं करता है। मुझे दोबारा कोशिश करने दो और सुनिश्चित करें कि मैं पागल नहीं हूँ। –

उत्तर

3

आपके प्रश्न में पोस्ट किया गया कोड काम के बिना काम करता है। आप अपने वर्तमान पैकेज नीचे धीरे-धीरे करने के लिए उपरोक्त सभी पैकेट वस्तुओं की परिभाषा चाहते हैं, आप किसी सबपैकेज com.company में

पैकेज वस्तु

package com 

package object company { 
    val something = "Hello world." 
} 

कक्षा सबपैकेज में कक्षाओं का पैकेज बयान को संशोधित करना होगा .model

package com 
package company 
package model 
// package com.company.model would not work here! 

object Model extends App { 
    println(something) 
} 

यह तकनीक अक्सर स्कैला लाइब्रेरी में उपयोग की जाती है। उदाहरण के लिए s.c.i.HashSet में पैकेज स्टेटमेंट देखें:

package scala 
package collection 
package immutable 
+0

दिलचस्प है और नहीं कि मैं कैसे उम्मीद करूँगा, लेकिन यह जानना अच्छा है कि यह संभव है! क्या इस बारे में कोई अंतर्दृष्टि है कि इसे इस फैशन में क्यों लागू किया गया है? –

+2

यह पूरी तरह से http://www.scala-lang.org/docu/files/package-clauses/packageclauses_0.html पर समझाया गया है –

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