1

scala2.9.2これは正常にコンパイルされます

object AppBuilder extends App {

  def app( blockw: Int => String ) : List[String] = List( blockw(6) )

  def app( block: => String ) : List[String] = app( _ => block )
}

しかし、REPLでは、上記と同じメソッド/関数(ここでの区別はわかりません)で、クラスに含まれていない場合、次のエラーが発生します

scala> def app( blockw: Int => String ) : List[String] = List( blockw(6) )
app: (blockw: Int => String)List[String]

scala> def app( block: => String ) : List[String] = app( _ => block )
<console>:8: error: missing parameter type
       def app( block: => String ) : List[String] = app( _ => block )
                                                     ^
4

1 に答える 1

5

オーバーロードされたメソッドは現在REPLでサポートされていません。理由の説明については、この回答を参照してください。これは、はるかに簡単な例で証明できます。

scala> def f(x: Int) = x
f: (x: Int)Int

scala> def f(x: String) = x
f: (x: String)String

を試しf(0)てみると、タイプの不一致が発生します。

回避策として貼り付けモードを使用できます。

scala> :paste
// Entering paste mode (ctrl-D to finish)

def app( blockw: Int => String ) : List[String] = List( blockw(6) )
def app( block: => String ) : List[String] = app( _ => block )

// Exiting paste mode, now interpreting.

app: (blockw: Int => String)List[String] <and> (block: => String)List[String]
app: (blockw: Int => String)List[String] <and> (block: => String)List[String]

ただし、オーバーロードは避けたほうがよいでしょう。

于 2012-05-15T22:42:49.300 に答える