質問
PowerShellでやや奇妙な動作が見られます。カスタム関数には「かっこラッパー」が必要なようです。期待どおりに評価する。単純なPowerShell関数を指定します:
function Return-True { return $true }
そしてそれを呼び出すサンプルコード:
PS C:\> Return-True
True
PS C:\> Return-True -eq $false
True
PS C:\> (Return-True) -eq $false
False
アイデア?コメント?
解決
PowerShellは、トークン Return-True
をコマンドとして認識し、評価またはステートメントの終了までトークンを識別します。それ以外はすべて、関数 Return-Trueに渡される引数です。
。
以下を実行すると、実際にこれを見ることができます:
PS > function Return-True { "The arguments are: $args"; return $true }
PS > Return-True -eq $false
The arguments are: -eq False
True
次のすべてが「True」を返すのは、さまざまな引数で Return-True
を呼び出した結果だけが表示されるためです。
PS > Return-True -eq $false
True
PS > Return-True -ne $false
True
PS > Return-True -eq $true
True
PS > Return-True -ne $true
True
(Return-True)
を使用すると、PowerShellで関数を(引数なしで)強制的に評価します。
他のヒント
2行目はブール評価を行っていません。同じことを文字列で行うとどうなるかを見てください。
PS C:\> function Return-True { return "True string" }
PS C:\> Return-True
True string
PS C:\> Return-True -eq "False string"
True string
PS C:\> (Return-True) -eq "False string"
False
2行目は、単に関数の値を返すだけで、比較は行いません。なぜこの動作が起こっているのか正確にはわかりませんが、文字列" True"に変換されるブール値を使用する場合よりも動作が見やすくなります。および「False」」。
PowerShell V2のエディターを使用すると、次のように表示されます 最初の例の-eqは、引数であるため青です。 2番目の例の-eqは演算子であるため灰色です
また、V2では、CmdletBindingとparamを使用して、引数について厳密にすることができます
function Return-True
{
[CmdletBinding()]
param()
return $true
}
Return-True -eq $false
Return-True -eq $false
Return-True : A parameter cannot be found that matches parameter name 'eq'.
At line:7 char:16
+ Return-True -eq <<<< $false
+ CategoryInfo : InvalidArgument: (:) [Return-True], ParameterBindingException
+ FullyQualifiedErrorId : NamedParameterNotFound,Return-True
所属していません StackOverflow