Действительно ли это - правило, которые не применяются, будет всегда возвращать Опцию?

Это создает сценарии: управляйте и добавляет его к Вашему пути. Отметьте, необходимо создать папку сами. В следующий раз необходимо возвратиться к нему, просто ввести "сценарии": и хит входит, точно так же, как любая буква диска в Windows.

$env:path += ";$profiledir\scripts"
New-PSDrive -Name Scripts -PSProvider FileSystem -Root $profiledir\scripts
6
задан Geo 14 December 2009 в 20:51
поделиться

3 ответа

Если вы хотите вернуть что-то с unapply , верните это внутри Some . Возвращение Boolean просто проверяет, может ли совпадение быть выполнено или нет.

Вот как переводится сопоставление с образцом:

str match { 
  case NumberMatcher(group) => println(group)
  case _ => println("no")
}

Предполагая, что NumberMatcher возвращает Option [.. .] , он будет делать:

val r1 = NumberMatcher.unapply(str)
if (r1 != None) {
  val group = r1.get
  println(group)
} else {
  println("no")
}

Если NumberMatcher возвращает Boolean, тогда вы можете получить что-нибудь. В этом случае происходит следующее:

str match { 
  case NumberMatcher() => println("yes")
  case _ => println("no")
}

становится

val r1 = NumberMatcher.unapply(str)
if (r1) {
  println("yes")
} else {
  println("no")
}

Обратите внимание, что это очень поверхностное объяснение. Соответствие регистрам может проверять константы, иметь дополнительные защитные условия, альтернативы, использовать unapply рекурсивно, использовать unapplySeq и т. Д. Здесь я только показываю очень базовое использование для ответа на конкретный вопрос.

9
ответ дан 8 December 2019 в 16:04
поделиться

Когда вы определили unapply для возврата Boolean , вы указали, что шаблон не нет подстановочных знаков для сопоставления (или привязки). Таким образом, оператор case для этого неэкстрактора должен быть case NumberMatcher => println (str) , и давать ему переменную для заполнения неверно.

В качестве альтернативы, чтобы сделать case NumberMatcher (group) = > println (group) вам необходимо определить unapply () , чтобы вернуть Option [String]

1
ответ дан 8 December 2019 в 16:04
поделиться

Взгляните на это Пример снова. Цитирую

Тип возврата неприменения должен быть выбран следующим образом:
* Если это просто тест, верните логическое значение. Например, case even ()
* Если он возвращает одно вложенное значение типа T, вернуть Option [T]
* Если вы хотите вернуть несколько подзначений T1, ..., Tn, сгруппируйте их в необязательном кортеже Option [(T1, ..., Tn)].

7
ответ дан 8 December 2019 в 16:04
поделиться
Другие вопросы по тегам:

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