在PowerShell中调用函数的正确方法是什么?
示例1:
Function Divide
{
Return ($a / $b)
}
Function GetNumbers
{
$a = Read-Host "Dividend"
$b = Read-Host "Divisor"
Divide
}
GetNumbers
示例2:
Function Divide
{
Param
(
[Int]$Dividend,
[Int]$Divisor
)
Return ($Dividend / $Divisor)
}
Function GetNumbers
{
$a = Read-Host "Dividend"
$b = Read-Host "Divisor"
Divide -Dividend $a -Divisor $b
}
GetNumbers
我的意思是,当我可以访问父函数的变量时,为什么要使用Param
部分?或者这只是糟糕的编程?
答案 0 :(得分:1)
第一个示例的问题是,Divide
函数只有恰好位于GetNumbers
函数内才有效。如果您尝试在GetNumbers
之外调用它,则会引发错误,因为$a
和$b
将是未定义的:
PS > Divide Attempted to divide by zero. At line:3 char:12 + Return ($a / $b) + ~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], RuntimeException + FullyQualifiedErrorId : RuntimeException
这意味着您的Divide
功能的用例非常有限,也有点不直观。人们可能会认为函数认为它将起作用(因为它处于模块级别)并且对结果感到惊讶。
然而,第二个示例中的Divide
函数没有此问题。它独立于GetNumbers
函数,可以在普通函数可以使用的任何地方使用。这有三个好处:
Divide
表现为模块级功能,这意味着您的用户不会感到惊喜。
Divide
的用例已大大增强。您现在可以在需要的任何地方划分两个数字。
您的代码更强大。 Divide
不需要在发生的函数中定义两个名为$a
和$b
的变量,这些变量只是发生到是数字(看第一个例子有多脆弱?)。
另请注意,您不需要在第二个示例中明确指定参数名称。你可以这么做:
Divide $a $b
如果您不喜欢第二个Divide
函数的大小,您可以随时将Param
语句分散开来:
Function Divide
{
Param ([Int]$Dividend, [Int]$Divisor)
Return ($Dividend / $Divisor)
}