Сопоставление с образцом Строка как Seq [Символ]

Я думаю, Bootstrap уже размещает модал выше z-index: 1000 (я не знаю, где именно), и то, что вы хотите сделать, работает с z-index: 2000;. Кнопка также должна быть в position: relative

10
задан Johannes Stiehler 11 April 2009 в 18:15
поделиться

3 ответа

Не уверен на 100%, верно ли это, но моя интуиция говорит, что без этого явного приведения вы бы сопоставили шаблон с java.lang.String , что не то, что вам нужно.

Явное приведение заставляет компилятор Scala использовать Predef.stringWrapper неявное преобразование; таким образом, как RichString расширяет Seq [Char] ,

11
ответ дан 3 December 2019 в 14:11
поделиться

В этом вопросе и комментариях происходит реальное злоупотребление терминологией. В этом коде нет приведений, и, в частности, «Так что, по сути, это серьезная уступка совместимости с Java, принося в жертву некоторую устойчивость типов», в действительности не имеет под собой никаких оснований.

Приведение в стиле scala выглядит следующим образом: x.asInstanceOf [Y] .
Вы видите выше назначение: val z: Seq [Char] = x

Это назначение допустимо, поскольку существует неявное преобразование из String в Seq [Char] . Я еще раз подчеркиваю, , это не актерский состав . Приведение - это произвольное утверждение, которое может потерпеть неудачу во время выполнения. Неявное завершение преобразования невозможно.

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

18
ответ дан 3 December 2019 в 14:11
поделиться

Я собираюсь повторить все, что сказал Андри. Для совместимости строки Scala являются java.lang.String s. В Predef есть неявное преобразование из String в RichString , которое реализует Seq [Char] .

Возможно, более приятный способ кодирования совпадения с образцом, без необходимости промежуточного значения z для хранения Seq [Char] :

def containsScala(x: String): Boolean = {
  (x: Seq[Char]) match {
    ...
  }
}
7
ответ дан 3 December 2019 в 14:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: