У меня есть следующая функция. Он генерирует строку в соответствии с переданными параметрами.Получить все параметры, переданные функции в PowerShell
function createSentenceAccordingly {
Param([Parameter(mandatory = $false)] [String] $name,
[Parameter(mandatory = $false)] [String] $address,
[Parameter(mandatory = $false)] [String] $zipcode,
[Parameter(mandatory = $false)] [String] $city,
[Parameter(mandatory = $false)] [String] $state)
$stringRequired = "Hi,"
if($name){
$stringRequired += "$name, "
}
if($address){
$stringRequired += "You live at $address, "
}
if($zipcode){
$stringRequired += "in the zipcode:$zipcode, "
}
if($name){
$stringRequired += "in the city:$city, "
}
if($name){
$stringRequired += "in the state: $state."
}
return $stringRequired
}
Итак, в основном функция возвращает что-то в зависимости от переданных параметров. Я хотел как можно больше избегать циклов if и сразу же получить доступ ко всем параметрам.
Могу ли я получить доступ ко всем параметрам в массиве или хэш-карте? Поскольку я должен использовать именованные параметры, $ args нельзя использовать здесь. Если бы я мог получить доступ ко всем параметрам сразу (может быть в массиве, например $ args или hashamp), мой план заключается в том, чтобы использовать это для динамического создания returnstring.
В будущем параметры для функции будут сильно увеличиваться, и я не хочу продолжать писать, если циклы для каждого дополнительного параметра.
Заранее спасибо, :)
Я хотел бы также добавить, что если вы планируете передать премного большое количество параметров функции, я чувствую, что положить все эти параметры в объект или данные структура и прохождение, что обычно является лучшей идеей. – EBGreen
@ EBGreen Я нахожусь на заборе об этом, когда дело доходит до powershell. Я думаю, что это сильно зависит от ситуации. С отдельными параметрами вы можете позволить powershell выполнять проверку типов, валидацию, использование наборов параметров и т. Д. Поскольку мы не можем создавать классы (до версии 5), я думаю, что раздельные часто лучше, но не всегда. По крайней мере, у нас есть функция splatting для более удобного вызова функций с большим количеством параметров. – briantist
Верно, что вы не можете писать реальные классы, но вы можете создавать объекты с помощью методов и свойств, которые позволят вам делать практически все, что вы сделали бы с экземпляром класса. – EBGreen