[英]Boolean variable gets returned as an Object[]
我有一個函數返回一個布爾變量
function test ($param1, $param2)
{
[boolean]$match=$false;
<# function logic #>
return $match
}
當我嘗試在變量$ retByFunct = testing $ param1 $ param 2中捕獲函數調用時
我將$ retByFunct作為對象數組。 如果我嘗試強制$ retByFunct為布爾變量,即[boolean] $ retByFunct = testing $ param1 $ param 2,則會收到以下錯誤。
無法將值“ System.Object []”轉換為System.Boolean類型
我剛剛返回$ match.GetType()。 控制台說它是一個布爾值,所以對於為什么在函數調用后將其轉換為對象數組感到困惑。
我知道某些收集對象會發生這種情況,並且可以解決該問題,但是如何處理變量的大小寫呢?
正如@mjolinor所說,您需要顯示其余代碼。 我懷疑它會在某個地方的成功輸出流上生成輸出。 PowerShell函數返回該流上的所有輸出,而不僅僅是return
關鍵字的參數。 從文檔中 :
在PowerShell中,即使沒有包含Return關鍵字的語句,每個語句的結果也將作為輸出返回。 諸如C或C#之類的語言僅
return
關鍵字指定的一個或多個值。
兩者之間沒有區別
function Foo {
'foo'
}
要么
function Foo {
'foo'
return
}
要么
function Foo {
return 'foo'
}
上面的每個函數在調用時都返回字符串foo
。
附加輸出使返回值成為數組,例如:
function Foo {
$v = 'bar'
Write-Output 'foo'
return $v
}
此函數返回數組'foo', 'bar'
。
您可以通過將其重定向到$null
來抑制不想要的輸出:
function Foo {
$v = 'bar'
Write-Output 'foo' | Out-Null
Write-Output 'foo' >$null
return $v
}
或通過將其捕獲到變量中:
function Foo {
$v = 'bar'
$captured = Write-Output 'foo'
return $v
}
返回某些信息##不是PowerShell返回的唯一內容。 如果願意,這是PowerShell的陷阱之一。 成功輸出流上的所有輸出也將被返回。 這就是為什么您要從函數返回一系列對象的原因。
function test {
"hello"
return "world"
}
$mytest=test
$mytest
嘗試上面的代碼...您將不僅獲得“世界”,還獲得“你好”,“世界”
$mytest.count
2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.