在浏览Spray.io示例库时,我在路由应用程序的FileUploadHandler示例中遇到了val
的声明。
val Some(HttpHeaders.Content-Type(ContentType(multipart: MultipartMediaType, _))) = header[HttpHeaders.Content-Type]
根据我的理解,变量声明为val <identifier> = ...
请帮助理解这种语法范例。
答案 0 :(得分:2)
val
比赋值运算符更复杂。
定义
val p = e
其中p
不仅仅是变量名,而是扩展为
val x = e match { case p => x }
以最简单的例子抓住战利品:
val Some(s) = Some(5)
因此,s
将等于5。
在您的示例中,header[HttpHeaders.Content-Type]
与Some(...)匹配。
答案 1 :(得分:1)
根据Scala language spec:值定义可以选择具有左侧的模式。请注意文档中的PatDef
。
部分&#34;价值定义中的模式&#34; Daniel Westheide's Blog提供了很好的用法概述。
答案 2 :(得分:0)
您正在寻找scala中的提取器/ mattern匹配,请参阅http://www.scala-lang.org/old/node/112。
您需要一个简单的形式,请看一下这个片段:
scala> val Some(t) = Some("Hello")
t: String = Hello