如何绑定数据对象

时间:2013-08-23 14:17:35

标签: scala

我有一个数据对象:

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的val,因为我试图实现一个告诉不要问策略)

1 个答案:

答案 0 :(得分: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!!!