PowerShell实现统计函数嵌套深度
当你调用某个函数时,PowerShell会增加一次嵌套层次。当一个函数调用了另一个函数,或着脚本,也会增加嵌套层次。今天分享一个函数,它能告诉你的脚本嵌套的层次:
functionTest-NestLevel
{
$i=1
$ok=$true
do
{
try
{
$test=Get-Variable-NameHost-Scope$i
}
catch
{
$ok=$false
}
$i++
}While($ok)
$i
}
当你调用的函数具有递归调用时,上面的函数非常有用,来看一个调用的示例:
functionTest-Diving
{
param($Depth)
if($Depth-gt10){return}
"Divingdeeperto$Depthmeters..."
$currentDepth=Test-NestLevel
"calculateddepth:$currentDepth"
Test-Diving-depth($Depth+1)
}
Test-Diving-depth1
当你运行Test-Diving时,函数会调用自己10次。函数使用一个参数来控制嵌套层次,而Test-NestLevel负责返回确切的深度数。
注意这里有个区别:Test-NestLevel返回绝对的嵌套层次,参数会纪录这个函数调用自己多少次。如果Test-Diving被嵌入到另外一个函数中,绝对深度和相对深度会不同。
PSC:\>Test-Diving-Depth1
divingdeeperto1meters...
calculateddepth:1
divingdeeperto2meters...
calculateddepth:2
divingdeeperto3meters...
calculateddepth:3
divingdeeperto4meters...
calculateddepth:4
divingdeeperto5meters...
calculateddepth:5
divingdeeperto6meters...
calculateddepth:6
divingdeeperto7meters...
calculateddepth:7
divingdeeperto8meters...
calculateddepth:8
divingdeeperto9meters...
calculateddepth:9
divingdeeperto10meters...
calculateddepth:10
PSC:\>&{Test-Diving-Depth1}
divingdeeperto1meters...
calculateddepth:2
divingdeeperto2meters...
calculateddepth:3
divingdeeperto3meters...
calculateddepth:4
divingdeeperto4meters...
calculateddepth:5
divingdeeperto5meters...
calculateddepth:6
divingdeeperto6meters...
calculateddepth:7
divingdeeperto7meters...
calculateddepth:8
divingdeeperto8meters...
calculateddepth:9
divingdeeperto9meters...
calculateddepth:10
divingdeeperto10meters...
calculateddepth:11
PSC:\>
Test-NestLevel总会返回从当前代码的作用域到全局作用域的嵌套深度。