2013-03-25 11 views
8

स्काला आरईपीएल एक में मूल्य प्रकार पा सकते हैं:स्कैला आरपीएल: फ़ंक्शन प्रकार कैसे ढूंढें?

scala> val x = 1 
    x: Int = 1 

    scala> :t x 
    Int 

फिर भी स्काला आरईपीएल कार्यों के लिए प्रकार की जानकारी प्रदर्शित नहीं करता है:

scala> def inc(x:Int) = x + 1 
    inc: (x: Int)Int 

scala> :t inc 
<console>:9: error: missing arguments for method inc; 
follow this method with `_' if you want to treat it as a partially applied function 
     inc 
    ^
<console>:9: error: missing arguments for method inc; 
follow this method with `_' if you want to treat it as a partially applied function 
      inc 
     ^

कैसे स्काला आरईपीएल में समारोह प्रकार खोजने के लिए?

+0

कैसे कर त्रुटि संदेश में यह क्या कहते हैं के बारे में? – folone

+0

[इस] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/15583551/type-information-in-the-scala-repl) –

उत्तर

21

सुझाव के बाद बहुत अच्छी तरह से काम करेगा:

:t inc _ 
Int => Int 

थोड़ा और अधिक विस्तार देने के लिए, कारण यह आवश्यक है कि स्काला 'तरीकों' है, जो JVM में देशी समर्थन है, लेकिन बीच एक अंतर को बनाए रखता है जो प्रथम श्रेणी नहीं हैं, और 'फ़ंक्शंस', जिन्हें FunctionX के उदाहरण के रूप में माना जाता है और JVM द्वारा ऑब्जेक्ट्स के रूप में देखा जाता है। पिछला अंडरस्कोर का उपयोग पूर्व को बाद में बदल देता है।

+1

धन्यवाद! तो मैं क्यों नहीं कर सकता: 't scala.collection.immutable.List.type.foldLeft _' और मैं भी नहीं कर सकता: t java.Lang.String.split _'? –

+2

वे दोनों क्लास विधियां हैं, और आप केवल आंशिक रूप से लागू हो सकते हैं (यानी एक 'फ़ंक्शन' ऑब्जेक्ट में कनवर्ट करें) एक इंस्टेंस विधि। कहें, 'सूची' का एक विशेष उदाहरण बनाएं, और आप इसकी 'foldLeft' विधि के प्रकार का निरीक्षण करने में सक्षम होंगे। – Impredicative

0

आप विधि का नाम और प्रेस टैब लिख सकते हैं।

Stream.fill<tab> 

आप देता है:

def fill[A](n1: Int,n2: Int,n3: Int)(elem: => A): 
scala.collection.immutable.Stream[scala.collection.immutable.Stream[scala.collection.immutable.Stream[A]]] 
def fill[A](n1: Int,n2: Int,n3: Int,n4: Int)(elem: => A): scala.collection.immutable.Stream[scala.collection.immutable.Stream[scala.collection.immutable.Stream[scala.collection.immutable.Stream[A]]]] 
def fill[A](n1: Int,n2: Int)(elem: => A): scala.collection.immutable.Stream[scala.collection.immutable.Stream[A]] 
def fill[A](n1: Int,n2: Int,n3: Int,n4: Int,n5: Int)(elem: => A): scala.collection.immutable.Stream[scala.collection.immutable.Stream[scala.collection.immutable.Stream[scala.collection.immutable.Stream[scala.collection.immutable.Stream[A]]]]] 
override def fill[A](n: Int)(elem: => A): scala.collection.immutable.Stream[A] 
संबंधित मुद्दे