0

型制約なしの関数パラメーターがある場合:

> function a ($s=$null) {if ($s -eq $null) {Write-Host "HI"} if ($s -eq "") {Write-Host "KK"}}
> a
HI

型制約を追加すると、 $null は別の方法で解釈されます。

> function a ([string]$s=$null) {if ($s -eq $null) {Write-Host "HI"} if ($s -eq "") {Write-Host "KK"}}
> a
KK

これを説明するドキュメントが見つかりません。また、一貫性もありません。

4

1 に答える 1

2

最初の例(関数a)では、$s同等です$null-それは本当にnullです。

2 番目の例 ( function b) では、オブジェクトにキャスト$sしているため[string]、実際には空String( と同等[String]::Empty) であり、 ではありません $null

これは、各関数に次を追加することで確認できます。

if($s -eq [String]::Empty){"empty!"};

のみbが印刷されますempty!-aこれを評価します$false

または、これを追加します。

$s|get-member

aを実行すると、実際にエラーがスローされます。実行した場合と同じエラーが発生します$null|get-member。それが であるbことが表示され、そのクラスのすべてのメンバーが一覧表示されます。$sstring

于 2013-05-02T19:28:50.537 に答える