Как Lee_Daily указывает:
Параметр значения по умолчанию являются не подтверждены - предполагается, что вы, как автор функции, гарантирует, что значения действительны.
Более простой пример:
PS> & { param([ValidateNotNullOrEmpty()] $foo = '') "foo: [$foo]" }
foo: []
То есть ''
был успешно принят в качестве значения по умолчанию, даже если онпротиворечит [ValidateNotNullOrEmpty()]
.
Кроме того, обычно вы не должны использовать значения внешних переменных функции в качестве значений параметров по умолчанию , поскольку это усложнит поведение функциипредсказывать.
Вместо этого используйте:
- литералов (например,
$foo = 'bar'
)
или
- выражений (например,
$foo = (Get-Date)
)
При этом Майк Шепард указывает, ссылаясь на переменные - это опция, если :
- ваша функция определена внутри модуля ,
- и переменные, на которые ссылаются, определены в этом же модуле .