Проблемы с возвращением хеш-таблицы - PullRequest
5 голосов
/ 29 декабря 2011

Так что, если у меня есть следующий код:

function DoSomething {
  $site = "Something"
  $app = "else"
  $app
  return @{"site" = $($site); "app" = $($app)}
}

$siteInfo = DoSomething
$siteInfo["site"]

Почему $ siteInfo ["site"] не возвращает "Something"?

Я могу заявить только ....

$siteInfo

И он вернется

else

Key: site
Value: Something
Name: site

Key: app
Value: else
Name: app

Чего мне не хватает?

Ответы [ 2 ]

16 голосов
/ 30 декабря 2011

В PowerShell функции возвращают все значения, возвращаемые каждой строкой функции;явный оператор return не требуется.

Метод String.IndexOf() возвращает целочисленное значение, поэтому в этом примере DoSomething возвращает '2' и хеш-таблицу в виде массива объектов, как видно из .GetType().

function DoSomething {
  $site = "Something"
  $app = "else"
  $app.IndexOf('s')
  return @{"site" = $($site); "app" = $($app)}
}

$siteInfo = DoSomething
$siteInfo.GetType()

В следующем примере показано 3 способа блокировки нежелательных выходных данных:

function DoSomething {
  $site = "Something"
  $app = "else"

  $null = $app.IndexOf('s')   # 1
  [void]$app.IndexOf('s')     # 2
  $app.IndexOf('s')| Out-Null # 3

  # Note: return is not needed.
  @{"site" = $($site); "app" = $($app)}
}

$siteInfo = DoSomething
$siteInfo['site']

Вот пример того, как обернуть несколько операторов в ScriptBlock для захвата нежелательных выходных данных:

function DoSomething {
    # The Dot-operator '.' executes the ScriptBlock in the current scope.
    $null = .{
        $site = "Something"
        $app = "else"

        $app
    }

    @{"site" = $($site); "app" = $($app)}
}

DoSomething
1 голос
/ 30 декабря 2011

@ Rynant ОЧЕНЬ полезный пост, спасибо за предоставленные примеры сокрытия вывода функции!

Мое предлагаемое решение:

function DoSomething ($a,$b){
  @{"site" = $($a); "app" = $($b)}
}

$c = DoSomething $Site $App
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...