関数の処理後に使用したい変数を作成する関数を使用しています。 私はそれらに直接アクセスしようとしましたが、できません。これをどうやってやりますか?関数が実行された後に関数内で作成された変数にアクセスする
答えて
関数内の変数は、関数の実行後も存続しません。関数が処理された後でそれらにアクセスする場合は、スコープ修飾子を接頭辞として使用します。詳細については、お使いのコンソールで
PS> function test-var{ $script:var='foo' }
PS> test-var # excute the function
PS> $var #print var
foo
タイプこれは:シェイが指摘したように
PS> Get-Help about_Scopes
ありがとうございます! – Sune
あなたはより高いレベルのスコープで利用できるようになり、関数のスコープ内のグローバル変数と呼ばれるものを作成することができます。しかし、グローバル変数は一般的には良い考えではないので、いくつかの選択肢を提案したいと思います。
これは、ウィキペディアglobal variableページからさ:
彼らは通常ため、その 非局所性、正確悪い習慣と考えられている:彼らは保護されたメモリに常駐しない限り、グローバル変数は、潜在的に どこでも(から変更することができますそうでない場合は が読み込み専用にレンダリングされます)、プログラムのどの部分もそれに依存する可能性があります。[1] したがって、グローバル変数は相互依存関係を作成するための無限の可能性を持ち、相互依存関係を追加すると複雑さが増します 複雑さ。
いくつかの選択肢:
関数は、呼び出し側が必要とするデータを返しください。 Powershell関数は一般に、Powershell関数の名詞に関連するデータを返します。naming convention Verb-Noun。名詞に関連付けられていない他のデータを返す必要がある場合は、2番目の機能を作成することを検討してください。
function Get-Directories { param ([string] $Path) # Code to get or create objects here. $dirs = Get-ChildItem -Path $Path | where {$_.PsIsContainer} # Explicitly return data to the caller. return $dirs } $myDirs = Get-Directories -Path 'C:\'
reference variableを使用してください。参照はメモリ内の変数のアドレスを関数に渡します。関数が変数のデータを変更すると、関数の外部でアクセスできるようになりますが、変数のスコープは変更されません。
function Get-Directories { param ([string] $Path, [ref] $Directories) $Directories.Value = Get-ChildItem -Path $Path | where {$_.PsIsContainer} } $myDirs = $null Get-Directories -Path 'C:\' -Directories ([ref] $myDirs)
この情報がお役に立てば幸いです。ハッピーコーディング:-)
あなたのthouroughの答えをありがとう! – Sune
で関数を実行する場合。あなたのスコープ内で関数が実行され、関数内で定義されたすべての変数が呼び出し側に利用可能になります。
すなわち
. $func
$myPrivateVariable # Now Set in the parent scope.
機能がモジュール内にある場合、あなたはまた、モジュールのスコープにアクセスするにはトリックのこの種を使用することができますが:
$m =Get-Module myModule
. $m { $myPrivateModuleVariable }
希望これは、あなたがソースコードを共有することができ
ありがとうございました!しかし、なぜあなたはそれの前にドル記号であなたの機能を実行するのですか?変数のように? – Sune
これはサンプルです:-)しかし、この方法でもコマンドを扱うことができます。私。 $ a = Get-Command Get-Command; &$ a、またはScriptBlock:$ a = {$ b = 1}; 。 $ a; $ b –
- 1. ネストされた関数内でグローバル変数にアクセスする
- 2. インポートされたモジュール内の関数からグローバル変数にアクセス
- 3. DOM内に要素が表示された後で関数を実行する
- 4. グローバルスコープの関数内で定義された関数へのアクセス?
- 5. 匿名関数内で宣言された関数へのアクセス?
- 6. 関数の実行後に関数内の変数が破棄されますか?
- 7. 別の関数が実行された後に1つの関数を実行する
- 8. 別の関数のある関数で定義され、宣言された変数にアクセスする方法は?
- 9. 呼び出された関数が実行される前にコードを実行
- 10. tkinter - フレームが表示された後の関数の実行
- 11. クラス内の関数内で宣言された変数へのアクセス(PHP)
- 12. 公開された関数内でuser/userIdにアクセスします
- 13. ページがロードされたときに関数を実行する
- 14. javascriptコールバック関数 - 複数の関数が実行されない
- 15. knockout.jsですべてのobservableArray依存関係が実行された後に関数を実行する方法
- 16. mysqli prepared statement - ネストされた関数が実行されない
- 17. 変数として宣言された関数内の変数にアクセスするには?
- 18. イベントハンドラがトリガーされた後にのみ関数を実行する
- 19. 関数内で宣言された関数のスコープ
- 20. 関数内の変数にアクセスする
- 21. 関数A、B、Cが実行された後にのみ関数Dを呼び出す方法
- 22. 関数内で定義されたjavascript変数が関数内で '未定義'です
- 23. Yii:submitButtonが押されたときに関数を実行
- 24. Lua - テーブルに格納された関数を実行する
- 25. yui rteの内容が変更されたときの関数の実行
- 26. Javascript変数は、関数が実行された後に自身をリセットし続けます。
- 27. プロトタイプ関数で変更された数値変数の更新
- 28. JavaScript関数を介して渡された変数にアクセスする方法
- 29. 関数が実行されない
- 30. AJAXコールで作成されたJavascriptグローバル変数の作成/アクセス
を支援しますか? – rene