Что означает двойное двоеточие (или двоеточие) :: в Scala? - PullRequest
0 голосов
/ 25 апреля 2019

У меня возникла проблема со сборкой sbt моего проекта Scala ( повторяющаяся запись: META-INF/MANIFEST.MF), и следующие строки решили проблему:

assemblyMergeStrategy in assembly := {
  case PathList("META-INF", xs @ _*) =>
    (xs map {_.toLowerCase}) match {
      case ("manifest.mf" :: Nil) | ("index.list" :: Nil) | ("dependencies" :: Nil) => MergeStrategy.discard
      case _ => MergeStrategy.last
    }
}

IТеперь я пытаюсь понять, что означает двойное двоеточие в вышеуказанном контекстеЯ нашел ответ в Quora , но это не помогло.

Более того, я новичок в Scala, который не очень помогает.

Редактировать:

Видя ответы, я все еще не понимаюпочему, поскольку мы создаем список, следующее не работает (дубликаты manifest.mf записей не удаляются):

case List("manifest.mf", "index.list", "dependencies") => MergeStrategy.discard

Также не выполняется следующее: (ошибка: ')' expected but '=>' found.):

case List("manifest.mf") | List(("index.list") | List("dependencies") => MergeStrategy.discard

Редактировать 2:

Снятие дополнительного кронштейна сделало следующую работу:

case List("manifest.mf") | List("index.list") | List("dependencies") => MergeStrategy.discard

А для тех, кто интересуется темой ... 5 способов создания списков в Scala .

Ответы [ 2 ]

5 голосов
/ 25 апреля 2019

Как правило, "manifest.mf" :: Nil совпадает с `List (" manifest.mf "). Это просто способ составить или сопоставить образец со списком.

Существуют хорошие ресурсы о том, как работает сопоставление с шаблоном (также поиск unapply) в Scala, в основном используется в операторах case.

Здесь говорится: если в этом списке есть один элемент, и это один из элементов (manifest.mf, index.list, dependencies), тогда выберите MergeStrategy.discard

2 голосов
/ 25 апреля 2019

Это имя класса (да, :: является допустимым именем класса). Он разрешается как Nil.::(arg), поскольку каждый метод, заканчивающийся двоеточием, является ассоциативно правым, что, в свою очередь, приводит к ::(arg, Nil). Это создает список с заданными параметрами (добавляет элемент к существующему списку или создает его, если вызывается на Nil).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...