2010-07-27 6 views
5

जब मैं स्कैला कंसोल का उपयोग करता हूं, तो यह किसी ऑब्जेक्ट को एक स्पष्ट शैली में प्रिंट करता है, उदा।स्काला कंसोल में स्क्रिप्ट में किसी ऑब्जेक्ट का निरीक्षण कैसे करें?

scala> val mike = ("mike", 40, "New York") 
mike: (java.lang.String, Int, java.lang.String) = (mike,40,New York) 

लेकिन अगर मैं एक स्क्रिप्ट फ़ाइल में लिखते हैं, जैसे:

val mike = ("mike", 40, "New York") 
println(mike) 

यह केवल प्रिंट:

(mike,40,New York) 

मैं स्केला सांत्वना की तरह स्क्रिप्ट फ़ाइल में कैसे कर सकते? क्या इसके लिए कोई विधि है?

उत्तर

11

आप एक प्रकट साथ एक चर के प्रकार प्राप्त कर सकते हैं:

scala> def dump[T: Manifest](t: T) = "%s: %s".format(t, manifest[T]) 
dump: [T](t: T)(implicit evidence$1: Manifest[T])String 

scala> dump((1, false, "mike")) 
res3: String = (1,false,mike): scala.Tuple3[Int, Boolean, java.lang.String] 

अनुमानित प्रकार T एक सार प्रकार है, तो, एक अंतर्निहित Manifest[T] प्रदान की वहाँ होना चाहिए अन्यथा यह संकलन नहीं होंगे।

scala> def dump2[T](t: T)(implicit mt: Manifest[T] = null) = "%s: %s".format(t, 
    | if (mt == null) "<?>" else mt.toString) 
dump2: [T](t: T)(implicit mt: Manifest[T])String 

scala> trait M[A] { 
    | def handle(a: A) = dump2(a) 
    | } 
defined trait M 

scala> (new M[String] {}).handle("x") 
res4: String = x: <?> 
+0

आपके उत्तर के लिए धन्यवाद:

scala> trait M[A] { | def handle(a: A) = dump(a) | } <console>:7: error: could not find implicit value for evidence parameter of type Manifest[A] def handle(a: A) = dump(a) 

आप एक संस्करण है कि इस मामले में निहित Manifest[T] पैरामीटर के लिए एक डिफ़ॉल्ट प्रदान करता है बना सकते हैं। हालांकि अब मुझे समझना बहुत मुश्किल है (मैं इसे सिर्फ 2 दिनों के लिए सीखता हूं), लेकिन मुझे लगता है कि मैं इसे किसी दिन सावधानीपूर्वक पढ़ूंगा :) – Freewind

+0

यह उस प्रकार को प्रिंट करता है जो अच्छा है, लेकिन वास्तविक मूल्यों को देखना बहुत अच्छा होगा – cevaris

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