簡體   English   中英

布爾變量作為Object []返回

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM