我正试图围绕 Spray 如何实施他们的指令,特别是参数提取 DSL。
我了解磁铁模式(几乎不了解),但我坚持 ParamDefMagnet 和 ParamDefMagnet2 如何协同工作。
def parameter(pdm: ParamDefMagnet): pdm.Out = pdm()
trait ParamDefMagnet {
type Out
def apply(): Out
}
trait ParamDefMagnet2[T] {
type Out
def apply(value: T): Out
}
type ParamDefMagnetAux[A, B] = ParamDefMagnet2[A] { type Out = B }
def ParamDefMagnetAux[A, B](f: A ⇒ B) = new ParamDefMagnet2[A] { type Out = B; def apply(value: A) = f(value) }
我正在尝试通过以下隐式方法将 ParamDefManget2 隐式转换为 ParamDefMagnet 。
object ParamDefMagnet {
implicit def apply[T](value: T)(implicit pdm2: ParamDefMagnet2[T]) = new ParamDefMagnet {
type Out = pdm2.Out
def apply() = pdm2(value)
}
}
如果我打电话parameter("name")
,“名称”如何隐式转换为ParamDefMagnet
?如果它将它转换为ParamDefMagnet2
第一个,那么value: T
从哪里来将它转换为一个ParamDefMagnet
?