我有以下代码,我尝试将字符串Good
作为FooFunc
的输出参数返回。
我该怎么做?
function FooFunc($a, [ref]$result){
if (4 -gt 1) {
$result = "Good"
return $true
} else {
$result = "Bad"
return $false
}
}
try
{
FooFunc "Bar" ([ref]$result)
Write-Host $result
}
catch
{
Write-Host $_.Exception.Message
}
编辑我不想使用return
返回答案,我需要ref
或parameters
答案 0 :(得分:0)
你可以尝试
Function Foo{
if(4 -gt 1)
{
return "Good"
}
else
{
return "Bad"
}
}
try{
$result = Foo
Write-Output $result
}
catch{
Write-Output "Some message"
}
答案 1 :(得分:0)
[ref]用于将变量传递给函数,因此它需要存在于当前作用域中,这就是您收到错误的原因。我认为你误解了用法。试试这个:
function FooFunc([ref]$result){
if (4 -gt 1) {
$result = 'good' + $result.value
$result
} else {
$result = "Bad"
return $false
}
}
try
{
$result = 'badval'
FooFunc ([ref]$result)
}
catch
{
Write-Host $_.Exception.Message
}
如果将函数传递给get-member,您将看到它返回ref并且输出正在使用您传入的变量。
答案 2 :(得分:0)
将[ref]
应用于参数将导致PSReference
对象传递给函数。
对于function FooFunc($a, [ref]$result)
,使用$result = "Good"
会将函数中的本地$result
变量从PSReference
更改为string
,但会有对调用者传入的变量没有影响。要修改外部变量,您需要设置$result.Value = "Good"
。
作为Noah Sparks mentioned,在调用者方面,您还需要在将变量用作参数之前声明该变量。
function FooFunc( $a, [ref]$result ) {
if( 4 -gt 1 ) {
$result.Value = 'Good' # change the reference value, not the variable
return $true
}
else {
$result.Value = 'Bad'
return $false
}
}
try {
$result = $null # declare variable before using it for a reference
FooFunc 'Bar' ([ref]$result)
Write-Host $result
}
catch {
Write-Host $_.Exception.Message
}
另一种选择是从函数中输出多个值:
function FooFunc( $a ) {
if( 4 -gt 1 ) {
# Output both result and success values
'Good'
return $true
}
else {
# This single return is the same as the output and return above
return 'Bad', $false
}
}
try {
$result,$success = FooFunc 'Bar' # Receive both values
$success # Implicitly output success value, as before
Write-Host $result
}
catch {
Write-Host $_.Exception.Message
}