Quelqu'un a des idées pour lesquelles le code suivant produirait une erreur, voir les commentaires supplémentaires après la fonction pour plus de détailserreur Powershell retour Hashtable
function callee ([Hashtable]$arg0) {
[Hashtable]$hashtable = @{}
$hashtable = $arg0
$hashtable.add('passed', $True)
# $hashtable ######## toggle this line
$type = $hashtable.GetType()
Write-Host "$type"
return $hashtable
}
function caller {
[Hashtable]$hashtable = @{'00'='0'}
$hashtable = callee $hashtable ##### returns error here
$hashtable.add('returned', $True)
$hashtable
}
caller
message d'erreur: Impossible de convertir le « System.Object [] » valeur de type "System.Object []" pour taper "System.Collections.Hashtable".
Je reçois l'erreur sur une variété d'instances, j'ai essayé de la réduire à un exemple qui est facile à reproduire. Il semble qu'il change la hashtable en un tableau d'objets et c'est pourquoi il ne le retournera pas? Cela me permet de modifier la hashtable et de la renvoyer mais quand j'essaye de l'afficher ça la change? Est-ce le même effet que je reçois quand je commence à ajouter du code à la fonction de l'appelé?
Question similaire ici http://stackoverflow.com/questions/2158786/calling-echo-inside-a-function-pre-pends-echo-string-to-return-value-in-powershel –
D'accord. Je recommande de ne pas utiliser l'idiome 'return' dans PowerShell car il est trompeur. Il est fonctionnellement équivalent à 'Write-Output ; retour ». Mieux vaut juste mettre $ hashtable comme dernière ligne de la fonction et l'appeler bien (comme le fait la fonction * caller *). –