2010-05-04 12 views
8

बेस प्रश्न:बेहतर बनाएँ स्काला में पूर्वनिर्धारित तरीके

मैं सिर्फ स्काला में लिख सकते हैं क्यों:

Console println(10) 

फॉलोअप:

println(10) 

क्यों मैं लिखने की जरूरत नहीं है प्रश्न:

मैं एक नई विधि "foo" कैसे पेश कर सकता हूं जो हर जगह दिखाई दे रहा है और "println" जैसा प्रयोग योग्य है?

उत्तर

18

आप बयान के सामने Console लिखने की जरूरत नहीं है क्योंकि स्काला Predef वस्तु है, जो स्वत: ही किसी स्काला स्रोत फ़ाइल के लिए आयात किया जाता है, इस तरह के परिभाषाएँ शामिल हैं:

def println() = Console.println() 
def println(x: Any) = Console.println(x) 

आप आसानी से नहीं बना सकते एक "वैश्विक" विधि जो स्वचालित रूप से हर जगह दिखाई देती है। आप क्या कर सकते उदाहरण के लिए एक पैकेज वस्तु में ऐसे तरीकों डाल दिया जाता है,:

package something 

package object mypackage { 
    def foo(name: String): Unit = println("Hello " + name") 
} 

लेकिन यह उपयोग करने के लिए है, तो आप पैकेज आयात करने की आवश्यकता होगी सक्षम होने के लिए:

import something.mypackage._ 

object MyProgram { 
    def main(args: Array[String]): Unit = { 
     foo("World") 
    } 
} 

(नोट: पैकेज ऑब्जेक्ट के बजाए आप इसे ऑब्जेक्ट, क्लास या विशेषता की सामग्री आयात करते समय नियमित ऑब्जेक्ट, क्लास या विशेषता में डाल सकते हैं - लेकिन इस उद्देश्य के लिए पैकेज ऑब्जेक्ट्स कम या कम हैं)।

+1

धन्यवाद। लगभग सही जवाब। क्या आयात से बचने की संभावना है? मेरा मतलब है: क्या मैं इस "प्रीडिफ" ऑब्जेक्ट को बढ़ा सकता हूं? – fratnk

+3

पैकेज ऑब्जेक्ट स्वचालित रूप से उस पैकेज में सभी कक्षाओं और वस्तुओं में आयात किया जाता है। – missingfaktor

+1

@fratnk: StackOverflow का उपयोग करने के बारे में: आप अपने प्रश्न के उत्तर के रूप में इसे स्वीकार करने के लिए मेरी पोस्ट के ऊपरी बाईं ओर स्थित चेक मार्क पर क्लिक कर सकते हैं। – Jesper