2013-03-25 15 views
8

1が値型を見つけることができます。Scala REPL:関数型の検索方法は? ScalaのREPLで

scala> val x = 1 
    x: Int = 1 

    scala> :t x 
    Int 

しかし、Scalaの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 
     ^

ScalaのREPLで関数の型を見つけるには?提案後

+0

どのように? – folone

+0

[this](http://stackoverflow.com/questions/15583551/type-in​​formation-in-the-scala-repl)の可能な複製 –

答えて

21

はかなりうまく動作します:

:t inc _ 
Int => Int 

をもう少し詳細を与えるために、これが必要な理由は、Scalaは「メソッド」の間の区別を維持することで、JVMでネイティブサポートを持っているが、ファーストクラスではない「ファンクション」は、FunctionXのインスタンスとして扱われ、JVMによってオブジェクトとして認識されます。末尾のアンダースコアを使用すると、後者のアンダースコアが後者のアンダースコアに変換されます。

+1

ありがとう!なぜ、私はできないのですか: ':t scala.collection.immutable.List.type.foldLeft _'そして、':t java.Lang.String.split _'を実行できません。 –

+2

これらはどちらもクラスメソッドであり、インスタンスメソッドを部分的に適用する(つまり、 'Function'オブジェクトに変換する)ことができます。たとえば、 'List'の特定のインスタンスを作成すると、' 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] 
関連する問題