4

Scala の学習を開始し、コンソールでメソッド シグネチャをすばやく確認したいと考えています。たとえば、Haskell では次のようにします。

Prelude> :t map
map :: (a -> b) -> [a] -> [b]

これは、マップ関数のシグネチャを明確に示しています。つまり、次のようになります。

  1. aを受け取りbを返す関数
  2. リスト

そして戻る

  1. bのリスト

これは、マップ関数がリストの各要素に関数を適用することにより、 aのリストをbのリスト変換するという結論につながります。

Scalaで同様の方法でメソッドタイプを取得する方法はありますか?

アップデート:

Federico Dal Maso の回答を試して、これを取得する

scala> :type Array.fill
<console>:8: error: ambiguous reference to overloaded definition,
both method fill in object Array of type [T](n1: Int, n2: Int, n3: Int, n4: Int, n5: Int)(elem: => T)(implicit evidence$13: scala.reflect.ClassManifest[T])Array[Array[Array[Array[Array[T]]]]]
and  method fill in object Array of type [T](n1: Int, n2: Int, n3: Int, n4: Int)(elem: => T)(implicit evidence$12: scala.reflect.ClassManifest[T])Array[Array[Array[Array[T]]]]
match expected type ?
       Array.fill

明らかに、fill メソッドがオーバーロードされており、:type はどのオーバーロードを表示するかを決定できません。すべてのメソッド オーバーロードの型を表示する方法はありますか?

4

3 に答える 3

4
scala> :type <expr>  

評価せずに式の型を表示する

于 2012-09-27T08:14:26.600 に答える
2

Scalas REPL は有効な式の型しか表示できず、ghci ほど強力ではありません。代わりに、scalex.org (Scalas Hoogle に相当) を使用できます。入力しarray fillて受け取る:

Array fill[T]: (n: Int)(elem: ⇒ T)(implicit arg0: ClassManifest[T]): Array[T]
于 2012-09-27T14:18:20.343 に答える
0

:type <expr>

動作しますが、exprがメソッドの場合は、部分的に適用された関数として扱うためにアンダースコアを追加する必要があります。

scala> def x(op: Int => Double): List[Double] = ???
x: (op: Int => Double)List[Double]

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

scala> :type x _
(Int => Double) => List[Double]
于 2017-02-08T08:36:16.360 に答える