在foreach循环再利用变量
意识到它可能它可能不是最好的做法,有没有其他的理由不重用在foreach当前项变量,例如:在foreach循环再利用变量
foreach ($a in $something)
{Write-host $a}
.
.
.
foreach ($a in $somethingelse)
{Write-host $a}
换句话说,就是它始终在第二种情况下最好使用不同的变量($ b?)
没有什么问题。变量$a
将始终设置为foreach
循环体内的当前项目。
作为briantist提到这很好。但是,当我做一个foreach
循环时,我倾向于保持它指定给你从中取得的任何东西。我觉得这样会更容易理解。
#Example 1
foreach ($item in $array)
{Write-Host $item}
#Example 2
foreach ($user in $userList)
{Write-Host $user}
#Example 3
foreach ($breed in $dogBreed)
{Write-Host $breed}
原因之一,这不是一个想法是,可变$a
保留它的值(指定范围内),直到它被重新分配。这听起来可能不是什么大问题,但偶尔PowerShell会做出一些意想不到的事情,但仅仅通过排除故障来解决问题就不值得。考虑这个function
:
function reuse-vars {
$arrayA = 0..3
$arrayB = 10..13
$arrayC = 20..23
foreach ($a in $arrayA){
Write-Host "`$a is $a"
Write-Host "`$b is $b"
Write-Host "`$c is $c"
}
foreach ($b in $arrayB){
Write-Host "`$a is $a"
Write-Host "`$b is $b"
Write-Host "`$c is $c"
}
foreach ($c in $arrayC){
Write-Host "`$a is $a"
Write-Host "`$b is $b"
Write-Host "`$c is $c"
}
}
$a
会从最后一个foreach
迭代保留值,直到它被重新分配,内嵌套foreach
包括或者如果他们在系列。
C:\> reuse-vars
$a is 0
$b is
$c is
$a is 1
$b is
$c is
$a is 2
$b is
$c is
$a is 3
$b is
$c is
$a is 3
$b is 10
$c is
$a is 3
$b is 11
$c is
$a is 3
$b is 12
$c is
$a is 3
$b is 13
$c is
$a is 3
$b is 13
$c is 20
$a is 3
$b is 13
$c is 21
$a is 3
$b is 13
$c is 22
$a is 3
$b is 13
$c is 23
它可能不是取决于你在做什么,但对于这导致的问题可能使它值得梦想每个foreach
(如$b
)不同的变量名没关系。
我不认为这与其他任何保留其价值的变量不同。这也不是真正解决问题中提出的情况。 – briantist
我同意其他人认为这应该很好,但使用不同的名字是更好的做法。
不过,如果你是偏执狂,你可以随时清除或手动删除环路之间的变量:
foreach ($a in $something)
{Write-host $a}
.
$a = $null;
.
foreach ($a in $somethingelse)
{Write-host $a}
或者:
foreach ($a in $something)
{Write-host $a}
.
Remove-Variable -Name a;
.
foreach ($a in $somethingelse)
{Write-host $a}
我同意这种说法。如果后续的'foreach'循环使用相同的实例变量是有意义的,那么我将在海报完成时重用它,如果没有意义,我将使用一个新名称。本质上,旨在提高可读性。 – briantist
感谢您的澄清。在我的情况下,我从两个不同的计算机列表中拉出来,所以foreach($ list1中的$ computer)和foreach($ list2中的$ computer)对于正在使用的内容仍然有意义。 – Clizby