首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >喷雾参数是如何工作的?

喷雾参数是如何工作的?
EN

Stack Overflow用户
提问于 2015-04-23 14:27:34
回答 1查看 275关注 0票数 0

我正在试图理解Spray是如何实现它们的指令的,尤其是参数提取DSL。

我了解磁铁模式(勉强),但被困在ParamDefMagnet和ParamDefMagnet2是如何协同工作的。

代码语言:javascript
复制
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。

代码语言:javascript
复制
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,那么为了将其转换为ParamDefMagnetvalue: T从何而来

EN

回答 1

Stack Overflow用户

发布于 2015-04-24 07:51:03

因此,在深入研究了示例之后,我想我终于了解了参数函数是如何工作的:

代码语言:javascript
复制
def parameter(pdm: ParamDefMagnet): pdm.Out = pdm()

以下是提取String类型参数的示例:

代码语言:javascript
复制
val p: Directive1[String] = parameter("name")

// we can then apply the function with the extracted name
p { name => 
   // stuff
}

Spray使用了一系列隐式转换,但基本上,如果您有一个String和一个String => Directive1[String],就可以构造一个() => Directive1[String]

代码语言:javascript
复制
// Our String => Directive1[String]
val pdm2: ParamDefMagnet2[String] { type Out = Directive1[String] } = ParamDefMagnet2.fromString

// Our () => Directive1[String]
val pdm: ParamDefMagnet { type Out = Directive1[String] } = new ParamDefMagnet {
  type Out = Directive1[String]
  def apply() = pdm2("name")
}
val directive: Directive1[String] = pdm()
// equivalent to:
val directive2: Directive1[String] = parameter("name")

所有这些都构成了简单的parameter("name")调用:

代码语言:javascript
复制
val p: Directive1[String] = parameter("name")

有关如何以DSL-ey方式应用Directive1[String]的信息,请参见How do directives work in Spray?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29815377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档