小编Car*_*zel的帖子

scala - 我可以超载curried方法吗?

有没有办法在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)

使编译器抱怨"对重载定义的模糊引用",这似乎是合理的.有没有办法实现这样的事情?例如,在某些情况下,最后一个参数可能被认为是可选的.

scala

10
推荐指数
1
解决办法
695
查看次数

为什么我需要一个curried函数才能使用短占位符语法传递函数文字?

鉴于此定义:

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
推荐指数
1
解决办法
88
查看次数

标签 统计

scala ×2