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:\> 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)

相关推荐

  • 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 } 当你调用的函数具有递归调用时,上面的函数非

  • Windows Powershell 自动化变量

    Powershell 自动化变量 是那些一旦打开Powershell就会自动加载的变量. 这些变量一般存放的内容包括 用户信息:例如用户的根目录$home 配置信息:例如powershell控制台的大小,颜色,背景等. 运行时信息:例如一个函数由谁调用,一个脚本运行的目录等. PS> $HOME C:\Users\test PS> $currentProcessID=$pid PS> $currentProcessID 5356 PS> Get-Process -Id $pid H

  • 在Ruby on Rails中优化ActiveRecord的方法

    Ruby on Rails 编程常常会将您宠坏.这一不断发展的框架会让您从其他框架的沉闷乏味中解脱出来.您可以用习以为常的几行代码片断表达自己的意图.而且还可以使用 ActiveRecord. 对于我这样的一个老 Java? 程序员而言,ActiveRecord 多少有点生疏.通过 Java 框架,我通常都会在独立的模型和模式之间构建一种映射.像这样的框架就是映射框架.通过 ActiveRecord,我只定义数据库模式:或者用 SQL 或者用称为迁移(migration)的 Ruby 类.将对象

  • 给vue项目添加ESLint的详细步骤

    eslint配置方式有两种: 1.注释配置:使用js注释来直接嵌入ESLint配置信息到一个文件里 2.配置文件:使用一个js,JSON或者YAML文件来给整个目录和它的子目录指定配置信息.这些配置可以写在一个文件名为.eslintrc.*的文件或者在package.json文件里的eslintConfig项里,这两种方式ESLint都会自动寻找然后读取,或者你也可以在命令行里指定一个配置文件. 有几种东西是可以配置的: 环境:你的脚本会在哪种环境下运行.每个环境带来了一组特定的预定义的全局变量

  • PHP实现文件上传下载实例

    本文介绍了PHP实现文件上传与下载,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧. 一.上传原理与配置 1.1 原理 将客户端文件上传到服务器端,再将服务器端的文件(临时文件)移动到指定目录即可. 1.2 客户端配置 所需:表单页面(选择上传文件): 具体而言:发送方式为POST,添加enctype="multipart/form-data"属性,两者缺一不可(但是,优缺点并存,这里也限定了上传的方式和上传的文件之后的调用等方面,后面会说到) <!DOCTYPE h

  • php轻松实现文件上传功能

    本文分为五个部分针对php上传文件进行分析讲解,具体内容如下 文件上传变量 将服务器上的临时文件移动到指定目录下 php.ini上传相关配置 error错误号 单文件上传实例 1.文件上传变量 //$_FILES:文件上传变量 #name 文件的名称 #type 文件的类型 #tmp_name 临时文件名 #size 文件的大小 #error 错误信息 $filename = $_FILES["myFile"]["name"]; $type = $_FILES[&q

  • 使用 stylelint检查CSS_StyleLint

    当你书写大量的CSS代码时,可能会出现不止一个的错误.可能需要某个工具来阻止你CSS书写的错误. 可能,有的时候你的错误真的是一个bug.也有可能仅仅因为草率造成的不一致或者不明确的代码风格.可能它们当中的许多看起来微不足道(取决于你的性子),但是随着代码库的增多以及时间累积,许多人使用时就会做出有丑陋的东西.事情的后果不是你可以想象的. 你尝试去控制自己.你的同事也帮助你,当你游离及时纠正你的错误.但是,你和你的同事都是错误的制造者,所以最后至少在一定程度上都不可避免的失败了.后来,你或者其他

  • jquery移除了live()、die(),新版事件绑定on()、off()的方法

    我蛋疼了快10分钟,怎么调用都是报错,最后一查,原来jquery已经移除了live()和die()方法.使用了新的事件绑定方法on().解除绑定方法off(). 新的绑定方法on()和比live()相比,效率比之前的高.因为live()是固定在document节点上的.如果绑定的元素嵌套在很深的层中,那么事件一级级的传递必将影响到效率.而on()是绑定在$()选择的元素上,嵌套深度可自由选择. on()的参数 on( events [, selector ] [, data ], handler

  • 适用于php-5.2 的 php.ini 中文版[金步国翻译]

    由于作者水平有限,因此不能保证作品内容准确无误,请在阅读中自行鉴别.如果你发现了作品中的错误,请您来信指出,哪怕是错别字也好,任何提高作品质量的建议我都将虚心接纳.如果你愿意就作品中的相关内容与我进行进一步切磋与探讨,也欢迎你与我联系.联系方式:MSN: csfrank122@hotmail.com 复制代码 代码如下: ;; 关于php.ini ;; ; 这个文件必须命名为'php.ini'并放置在httpd.conf中PHPINIDir指令指定的目录中. ; 最新版本的php.ini可以在下

  • PHP实现文件上传与下载实例与总结

    一.上传原理与配置 1.1 原理 将客户端文件上传到服务器端,再将服务器端的文件(临时文件)移动到指定目录即可. 1.2 客户端配置 所需:表单页面(选择上传文件): 具体而言:发送方式为POST,添加enctype="multipart/form-data"属性,两者缺一不可(但是,优缺点并存,这里也限定了上传的方式和上传的文件之后的调用等方面,后面会说到) <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transition

随机推荐