PowerShell实现统计函数嵌套深度
程序员文章站
2022-03-14 07:59:12
当你调用某个函数时,powershell会增加一次嵌套层次。当一个函数调用了另一个函数,或着脚本,也会增加嵌套层次。今天分享一个函数,它能告诉你的脚本嵌套的层次:...
当你调用某个函数时,powershell会增加一次嵌套层次。当一个函数调用了另一个函数,或着脚本,也会增加嵌套层次。今天分享一个函数,它能告诉你的脚本嵌套的层次:
function test-nestlevel { $i = 1 $ok = $true do { try { $test = get-variable -name host -scope $i } catch { $ok = $false } $i++ } while ($ok) $i }
当你调用的函数具有递归调用时,上面的函数非常有用,来看一个调用的示例:
function test-diving { param($depth) if ($depth -gt 10) { return } "diving deeper to $depth meters..." $currentdepth = test-nestlevel "calculated depth: $currentdepth" test-diving -depth ($depth+1) } test-diving -depth 1
当你运行test-diving时,函数会调用自己10次。函数使用一个参数来控制嵌套层次,而test-nestlevel负责返回确切的深度数。
注意这里有个区别:test-nestlevel返回绝对的嵌套层次,参数会纪录这个函数调用自己多少次。如果test-diving被嵌入到另外一个函数中,绝对深度和相对深度会不同。
ps c:\> test-diving -depth 1 diving deeper to 1 meters... calculated depth: 1 diving deeper to 2 meters... calculated depth: 2 diving deeper to 3 meters... calculated depth: 3 diving deeper to 4 meters... calculated depth: 4 diving deeper to 5 meters... calculated depth: 5 diving deeper to 6 meters... calculated depth: 6 diving deeper to 7 meters... calculated depth: 7 diving deeper to 8 meters... calculated depth: 8 diving deeper to 9 meters... calculated depth: 9 diving deeper to 10 meters... calculated depth: 10 ps c:\> & { test-diving -depth 1 } diving deeper to 1 meters... calculated depth: 2 diving deeper to 2 meters... calculated depth: 3 diving deeper to 3 meters... calculated depth: 4 diving deeper to 4 meters... calculated depth: 5 diving deeper to 5 meters... calculated depth: 6 diving deeper to 6 meters... calculated depth: 7 diving deeper to 7 meters... calculated depth: 8 diving deeper to 8 meters... calculated depth: 9 diving deeper to 9 meters... calculated depth: 10 diving deeper to 10 meters... calculated depth: 11 ps c:\>
test-nestlevel总会返回从当前代码的作用域到全局作用域的嵌套深度。
上一篇: PowerShell实现时间管理小秘书