2013-03-25 123 views
8

在斯卡拉REPL一個可以找到值類型:Scala REPL:如何查找函數類型?

scala> val x = 1 
    x: Int = 1 

    scala> :t x 
    Int 

然而斯卡拉REPL不顯示的功能類型的信息:

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 
     ^

如何查找函數類型斯卡拉REPL?

+0

如何做它說什麼錯誤消息? – folone 2013-03-25 09:48:35

+0

[this]的可能重複(http://stackoverflow.com/questions/15583551/type-in​​-in-the-scala-repl) – 2013-03-25 10:02:38

回答

21

繼建議將工作得很好:

:t inc _ 
Int => Int 

爲了讓更多的細節,這是必要的原因是斯卡拉維持「方法」,其中有原生支持的JVM,但之間的區別它們不是頭等艙,而'功能'被視爲FunctionX的實例,並被JVM視爲對象。尾部下劃線的使用將前者轉換爲後者。

+1

謝謝!爲什麼然後我不能這樣做:':t scala.collection.immutable.List.type.foldLeft _'並且我不能這樣做::t java.lang.String.split _'? – 2013-03-25 10:30:16

+2

這些都是類方法,並且只能部分應用(即轉換爲'Function'對象)實例方法。創建一個'List'的特定實例,比方說,你將能夠檢查它的'foldLeft'方法的類型。 – Impredicative 2013-03-25 11:43:57

0

您可以編寫方法的名稱並按Tab鍵。

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] 
相關問題