2013-03-25 95 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] 
相关问题