use*_*210 3 powershell boolean return-value
我有一个返回布尔变量的函数
function test ($param1, $param2)
{
[boolean]$match=$false;
<# function logic #>
return $match
}
Run Code Online (Sandbox Code Playgroud)
当我尝试在变量$ retByFunct = testing $ param1 $ param 2中捕获函数调用时
我将$ retByFunct作为对象数组获取.如果我尝试强制$ retByFunct是一个布尔变量,即[boolean] $ retByFunct = testing $ param1 $ param 2,我得到以下错误.
无法将值"System.Object []"转换为System.Boolean类型
我在返回之前检查了$ match.GetType().控制台说它是一个布尔值,所以我很困惑为什么在函数调用后它被转换为一个Object Array.
我知道这对于某些集合对象会发生,并且有一个解决方法,但我如何处理变量的情况?
正如@mjolinor所说,你需要显示其余的代码.我怀疑它在某处成功输出流上生成输出.PowerShell函数返回该流上的所有输出,而不仅仅是return
关键字的参数.两者之间没有区别
function Foo {
'foo'
}
Run Code Online (Sandbox Code Playgroud)
要么
function Foo {
'foo'
return
}
Run Code Online (Sandbox Code Playgroud)
要么
function Foo {
return 'foo'
}
Run Code Online (Sandbox Code Playgroud)
上述每个函数return
在调用时都会返回字符串.
附加输出导致返回的值为数组,例如:
function Foo {
$v = 'bar'
Write-Output 'foo'
return $v
}
Run Code Online (Sandbox Code Playgroud)
此函数返回一个数组foo
.
您可以通过将其重定向到'foo', 'bar'
以下内容来抑制不需要的输出:
function Foo {
$v = 'bar'
Write-Output 'foo' | Out-Null
Write-Output 'foo' >$null
return $v
}
Run Code Online (Sandbox Code Playgroud)
或者通过在变量中捕获它:
function Foo {
$v = 'bar'
$captured = Write-Output 'foo'
return $v
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2152 次 |
最近记录: |