1

scala 2.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 回答