假设我有几个函数:
func1 : A => B
func2: B => C
func3: C => D
我希望现在能够以通用方式按需编排功能。
比如说,如果我需要将
A
转换为 B
,我会调用 func1
。
但是当我需要将 A
转换为 D
时,我想要这些函数的组合。这种动态方式是否可行?trait MyConverter[A, B] { def apply(a: A): B }
implicit def composeMyConverters[A, B, C](implicit
ab: MyConverter[A, B],
bc: MyConverter[B, C]
) = new MyConverter[A, C] { def apply(a: A) = bc(ab(a)) }
implicit object doubleToString extends MyConverter[Double, String] {
def apply(d: Double) = d.toString
}
implicit object intToDouble extends MyConverter[Int, Double] {
def apply(i: Int) = i.toDouble
}
def convertToString[A](a: A)(implicit as: MyConverter[A, String]) = as(a)
最后:
scala> convertToString(13: Int)
res0: String = 13.0
composeMyConverters
方法在需要时构建一个转换器。convertToString
方法中看到的隐式参数方法。 - Travis Brown