当前位置: 代码网 > it编程>前端脚本>Powershell > PowerShell实现统计函数嵌套深度

PowerShell实现统计函数嵌套深度

2024年05月18日 Powershell 我要评论
当你调用某个函数时,powershell会增加一次嵌套层次。当一个函数调用了另一个函数,或着脚本,也会增加嵌套层次。今天分享一个函数,它能告诉你的脚本嵌套的层次:function test-nestl

当你调用某个函数时,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总会返回从当前代码的作用域到全局作用域的嵌套深度。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com