我正试图围绕 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?