Функциональные параметры в PowerShell
Есть ли причина использовать конструкцию "Param (...)" в определении функции?
Я понимаю, что вы должны использовать это для указания параметров для скриптов (и скриптовых блоков). Я вижу много примеров в Интернете с параметрами, указанными здесь, а не просто перечислением параметров после имени функции.
Пример:
function Foo([string]$Bar){
#Body of function
}
Или
function Foo{
Param([string]$Bar)
}
Ответы
Ответ 1
В V1 это действительно предпочтение. Использование оператора param
традиционно было более формальным, но функционально это одно и тоже.
Вероятно, вы увидите гораздо больше использования PARAM в PowerShell V2 из-за возможности добавлять атрибуты к параметрам, аналогичным атрибутам на С#.
param
(
[Parameter( Mandatory=$true,
Position=0,
ValueFromPipeline = $true,
ValueFromPipelineByPropertyName = $true)]
[Alias("name")]
[String]
$path
)
Здесь вы можете указать атрибут параметра и кучу аргументов для этого атрибута. Вы также можете указать псевдонимы и ряд других мер по исправлению валидации.
Кит делает пару замечательных моментов. Вы можете использовать оператор param для передачи параметров в анонимные скриптовые блоки (лямбда-выражения) или PS1 script.
Ответ 2
param() требуется для указания параметров для файла script и для скриптовых блоков:
PS> $sb = {param($x,$y) $x + $y}
PS> &$sb 1 3
4
Наличие его также для традиционных функций - это просто последовательность IMO. Это лучше для продвинутых функций, которые имеют тенденцию иметь много багажа, метаданных, для каждого параметра.
Ответ 3
Возможно, как мера согласованности? Всегда задавая параметры таким же образом, улучшается читаемость.
Ответ 4
Параметр - это функция, которая используется для извлечения значения переменной формы, которая передается вашей программе (может быть Perl или любой скриптовый язык, вероятно, который использует CGI).
Например, в форме XHTML, когда вы используете элемент ввода (тег) и указываете тип "текст", вы также используете параметр под названием "имя". name присваивается значение, например num, и это значение должно быть параметром для функции param
, чтобы он мог извлечь значение, которое пользователь вводит в текстовое поле в вашей форме.