以下example from the the Akka HTTP docucumentation表明您可以使用map
上的Directives
方法来转换其价值,就像您期望的那样。
val textParam: Directive1[String] =
parameter("text".as[String])
val lengthDirective: Directive1[Int] =
textParam.map(text => text.length)
但是,当我尝试使用我自己的示例时,我得到了Tuple1
期望类型的指令,而不是预期类型本身的指令。例如:
val stringOpsDirective: Directive[Tuple1[StringOps]] =
textParam.map(text => augmentString(text))
我看到map
采用隐式Tupler
参数,但查看实现可以找到特征,我不知道所有内容都没有包含在Tuple
中。
答案 0 :(得分:1)
在使用map时,您声明了一个与示例中使用的声明略有不同但等效的返回类型。示例返回类型'指令 1 '您返回类型'指令'。
如果您使用Directive1
,您的示例采用与文档中相同的格式:
val stringOpsDirective: Directive1[StringOps] =
textParam.map(text => augmentString(text))
这是有效的,因为Directive1[_]
是Directive[Tuple1[_]]
的别名,定义如下:
type Directive1[T] = Directive[Tuple1[T]]
换句话说,你是对的,每个Directive
都被参数化地输入某种Tuple
。但是,在Directive1
的情况下,您可以使用Tuple1
类型隐藏该事实。