統計関数のネスト深度のPowerShell実装
2022-02-04 11:07:35
関数を呼び出すと、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回呼び出します。この関数はネストレベルを制御するために1つの引数を使用し、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: 2
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は常に、現在のコードのスコープからグローバルスコープまでのネストの深さを返します。
関連
-
Android携帯のwifiプロキシを自動設定するPowerShellスクリプト
-
Powershellスクリプトに電子署名を行う方法
-
PowerShell文字列オブジェクトのメソッド概要
-
PowerShellスクリプトのバッククオートの使用例です。いつでもどこでもコードに改行
-
PowerShellで特殊記号をコンソールに出力する方法
-
Powershellは2つのフォルダの差分を比較する
-
PowerShellでPrintManagementを使用してプリンターを管理する例
-
PowershellでWebServicesをリクエストし、結果をJSON形式で出力する
-
PowerShellでF1ヘルプコマンドのアクセスをオンラインドキュメントに変更する方法
-
PowerShellでWindowsの機能オプションを表示する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
PowerShellリモートタスクの実行手順
-
PowerShellでは配列のフィルタリングにmatch演算子を使用する
-
PowerShell 3.0 Hyper-V 3.0 の管理
-
ADユーザーのパスワード属性を一括で変更するPowerShellコード
-
PowerShellを使用して、現在のホストメモリ使用量と合計を取得する方法
-
文字列中の大文字を検索するPowerShellの実装
-
Powershellですべてのディスクレターを取得する方法
-
Powershellスクリプトで条件付きブレークポイントを使用する例
-
PythonでPowerShellを呼び出してbatファイルをリモート実行する例
-
PowerShellで複数ファイルからキーワードを取得する