了解scala

时间:2016-01-02 11:02:22

标签: scala syntax

在浏览Spray.io示例库时,我在路由应用程序的FileUploadHandler示例中遇到了val的声明。

val Some(HttpHeaders.Content-Type(ContentType(multipart: MultipartMediaType, _))) = header[HttpHeaders.Content-Type]

根据我的理解,变量声明为val <identifier> = ...

请帮助理解这种语法范例。

3 个答案:

答案 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