我有下面的脚本,来自互联网:
$private:a = 1
Function test {
"variable a contains $a"
$a = 2
"variable a contains $a"
}
test
它打印 2。没问题。如果我删除“私有(private)”,如下所示:
$a = 1
Function test {
"variable a contains $a"
$a = 2
"variable a contains $a"
}
它仍然打印“2”。好像没什么区别。您能否提供一个关于“私有(private)”范围如何影响结果的快速示例?
谢谢。
最佳答案
在编写调用用户提供的回调的函数时,私有(private)范围会很有用。考虑这个简单的例子:
filter Where-Name {
param(
[ScriptBlock]$Condition
)
$FirstName, $LastName = $_ -split ' '
if(&$Condition $FirstName $LastName) {
$_
}
}
然后,如果有人这样称呼它:
$FirstName = 'First2'
'First1 Last1', 'First2 Last2', 'First3 Last3' |
Where-Name {param($a, $b) $a -eq $FirstName}
他们只希望看到
First2 Last2
行,但实际上这将打印所有三行。这是因为
$FirstName
上的冲突多变的。为防止此类冲突,您可以在
Where-Name
中声明变量。作为私有(private):filter Where-Name {
param(
[ScriptBlock]$private:Condition
)
$private:FirstName, $private:LastName = $_ -split ' '
if(&$Condition $FirstName $LastName) {
$_
}
}
现在
$FirstName
在 Where-Name
不隐藏$FirstName
从 $Condition
引用时在外部范围内脚本块。
关于Powershell "private"范围似乎根本没有用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36346817/