1

我有一个数据对象:

case class Id(val value: String) extends AnyVal {
  def bind[A](f: ((String) => A)): A = {
    f(value)
  }
}

我想将 Id 绑定到的第一个参数String.format

id.bind(template.format)

但我得到了错误type mismatch: Seq[Any] => String => String

我相信这是因为template.format可以接受可变数量的参数。

有没有办法可以像这样制作一个很好的可重用绑定函数?

编辑:(我不想泄露 Id 的值,因为我正在尝试实施一个告诉不要问的策略)

4

1 回答 1

0

如果您在调用绑定中使用 lambda,那么一切都应该没问题:

id.bind(s => template.format(s))

或者,您可以将绑定函数更改为接受Seq[Any]

def bind[A](f: ((Seq[Any]) => A)): A = {
  f(Seq(value))
}

或者:

def bind[A](f: (String*) => A): A = {
    f(value)
}

id.bind(template.format) // Works!!!
于 2013-08-23T14:34:37.153 回答