我可以在javascript中编写以下代码:
function sum(num1, num2) {
return num1 + num2;
}
然后得到一个值
var someNum = sum(2,5);
我想在 Powershell 中做同样的事情,但我阅读了以下指南:
PowerShell 也知道 return 关键字;但是,它遵循不同的逻辑。通常,return 的目的是结束代码段的执行并将控制权交还给父块。
如果在 return 语句中添加参数,则该值确实会返回给调用子程序。但是,这也适用于所有其他带有输出的语句。这意味着函数中产生的任何输出都将与返回参数一起存储在变量中。
我想这样做是为了拥有纯功能。然而,它似乎在做
var someNum = sum(2,5);
完全是多余的,当我可以调用上面的函数时,在其中定义someNum
,它将在全局范围内可用。
我是否遗漏了什么,或者是否可以在 Powershell 中编写不返回函数内部所有内容的纯函数?
有点切线,但这是我的实际代码:
function GetPreviousKeyMD5Hashes() {
$query = "SELECT Name, MD5, executed FROM [AMagicDb].[dbo].cr_Scripts";
$command = New-Object System.Data.SQLClient.SQLCommand;
$command.Connection = $connection;
$command.CommandText = $query;
try {
$reader = $command.ExecuteReader();
while ($reader.Read()) {
$key = $reader.GetString(1)
$previousScripts.Add($key) | Out-Null
}
$reader.Close();
Write-Output "$(Get-Date) Finished querying previous scripts"
}
catch {
$exceptionMessage = $_.Exception.Message;
Write-Output "$(Get-Date) Error running SQL at with exception $exceptionMessage"
}
}
接着:
$previousScripts = New-Object Collections.Generic.HashSet[string];
GetPreviousKeyMD5Hashes;
我根本不清楚这段代码 - runningGetPreviousKeyMD5Hashes
确实 set $previousScripts
,但这对于在我之后修改它的人来说完全不清楚。我唯一的另一种选择(afaik)是将所有这些都排成一行,这也是不可读的。