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 )
^
答案 0 :(得分:5)
REPL目前不支持重载方法 - 请参阅this answer以获取解释原因。你可以用一个更简单的例子证明这一点:
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]
但你可能会更好avoiding overloading。