Просматривая библиотеку примеров Spray.io, я наткнулся на объявление val в примере приложения маршрутизации FileUploadHandler.

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

Насколько я понимаю, объявление переменной выглядит как val <identifier> = ...

Пожалуйста, помогите разобраться в этой синтаксической парадигме.

2
Harsh Gupta 2 Янв 2016 в 14:02

3 ответа

Лучший ответ

Согласно спецификации языка Scala: в качестве альтернативы определения значений могут иметь шаблон в левой части. Следите за PatDef в документе.

Раздел «Шаблоны в определениях значений» в Блог Дэниела Вестхайда дает хороший обзор использования.

1
Martin Senne 2 Янв 2016 в 11:46

Вы ищете сопоставление экстракторов / матерн в scala, см. http: //www.scala -lang.org/old/node/112.

Вам нужна простая форма, взгляните на этот фрагмент:

scala> val Some(t) = Some("Hello")
t: String = Hello
0
nikiforo 2 Янв 2016 в 11:44

val - это немного сложнее, чем просто оператор назначения.

Определение

val p = e

Где p - это не просто имя переменной, расширяется до

val x = e match { case p => x }

Взглянем на самый простой пример:

val Some(s) = Some(5)

В результате s будет равно 5.

В вашем примере header[HttpHeaders.Content-Type] сопоставляется с Some (...).

2
Roman Kh 2 Янв 2016 в 11:50