有没有办法在Scala中重载多个参数列表的方法?我想这样做:
def foo(a: Int)(b: Int)(c: Int): Int
def foo(a: Int)(b: Int): Int
Run Code Online (Sandbox Code Playgroud)
我可以像这样定义它,但尝试调用第二个方法,如下所示:
foo(1)(1)
Run Code Online (Sandbox Code Playgroud)
使编译器抱怨"对重载定义的模糊引用",这似乎是合理的.有没有办法实现这样的事情?例如,在某些情况下,最后一个参数可能被认为是可选的.
鉴于此定义:
class Foo(var x: String) {}
object Helper {
def model[T](get: ? T, set: T ? Unit) : Model[T] = new Model[T] {
override def getObject(): T = get
override def setObject(obj: T) { set(obj) }
}
}
Run Code Online (Sandbox Code Playgroud)
我试着model像这样打电话:
val f = new Foo("initial")
val stringModel = model(f.x, f.x = _)
Run Code Online (Sandbox Code Playgroud)
但这不起作用,编译器给了我这个,抱怨下划线:
missing parameter type for expanded function ((x$1) => f.x = x$1)
Run Code Online (Sandbox Code Playgroud)
如果我改变定义model使用两个参数列表,如下所示:
def model[T](get: ? T)(set: T ? Unit) // rest is unchanged
Run Code Online (Sandbox Code Playgroud)
然后我可以这样称呼它: …
scala ×2