例如,我有一条指令:
dispatchEvent
即使要将其编写为DOCSOURCE或DocSource,我也想获得docsource,我该怎么做?
答案 0 :(得分:1)
没有直接解决方案
我认为直接使用parameters
指令是不可能的。 'docsource
符号正通过an implicit conversion method in ParameterDirectives
转换为NameReceptacle
。 NameReceptacle:String
中只有1个name
成员变量。这样可以防止任何形式的正则表达式匹配或将Symbol转换为多个String以匹配所有可能的大写模式...
间接解决方案
parameterMap
指令可用于获取Map[String, String]
,然后您可以在其中操作按键:
val sourceTypeDirective : Directive1[DocumentSource] =
parameterMap {
(_ : Map[String, String])
.view
.map(tup => (tup._1.toLowerCase, tup._2))
.toMap
.get("docsource")
.filter(sourceAcceptedType)
.map(docSource => provide(sourceValueOf(docSource)))
.getOrElse(reject)
}
警告
查询字符串键"field"
与键"FIELD"
不同。从技术上讲,它们是2个不同的键,应对应2个不同的值。但是,解决该问题的任何方法都会导致这两个字段发生键冲突。