about_Ref
Descripción breve
Describe cómo crear y usar una variable de tipo de referencia. Puede usar variables de tipo de referencia para permitir que una función cambie el valor de una variable que se le pasa.
Descripción larga
Puede pasar variables a funciones por referencia o por valor.
Cuando se pasa una variable por valor, se pasa una copia de los datos.
En el ejemplo siguiente, la función cambia el valor de la variable que se le pasa. En PowerShell, los enteros son tipos de valor, por lo que se pasan por valor.
Por lo tanto, el valor de $var
no se modifica fuera del ámbito de la función.
Function Test($data)
{
$data = 3
}
$var = 10
Test -data $var
$var
10
En el ejemplo siguiente, se pasa una variable que contiene Hashtable
a una función . Hashtable
es un tipo de objeto, por lo que de forma predeterminada se pasa a la función por referencia.
Al pasar una variable por referencia, la función puede cambiar los datos y ese cambio persiste después de que se ejecute la función.
Function Test($data)
{
$data.Test = "New Text"
}
$var = @{}
Test -data $var
$var
Name Value
---- -----
Test New Text
La función agrega un nuevo par clave-valor que persiste fuera del ámbito de la función.
Escritura de funciones para aceptar parámetros de referencia
Puede codificar las funciones para tomar un parámetro como referencia, independientemente del tipo de datos pasados. Esto requiere que especifique el tipo de parámetros como System.Management.Automation.PSReference
, o [ref]
.
Al usar referencias, debe usar la Value
propiedad del System.Management.Automation.PSReference
tipo para acceder a los datos.
Function Test([ref]$data)
{
$data.Value = 3
}
Para pasar una variable a un parámetro que espera una referencia, debe escribir la variable como referencia.
Nota:
Los corchetes y paréntesis son obligatorios.
$var = 10
Test -data ([ref]$var)
$var
3
Pasar referencias a métodos de .NET
Algunos métodos de .NET pueden requerir que pase una variable como referencia. Cuando la definición del método usa las palabras clave in
, out
o ref
en un parámetro , espera una referencia.
[int] | Get-Member -Static -Name TryParse
Name MemberType Definition
---- ---------- ----------
TryParse Method static bool TryParse(string s, [ref] int result)
El TryParse
método intenta analizar una cadena como un entero. Si el método se realiza correctamente, devuelve $true
y el resultado se almacena en la variable que ha pasado por referencia.
PS> $number = 0
PS> [int]::TryParse("15", ([ref]$number))
True
PS> $number
15
Referencias y ámbitos
Las referencias permiten cambiar el valor de una variable en el ámbito primario dentro de un ámbito secundario.
# Create a value type variable.
$i = 0
# Create a reference type variable.
$iRef = [ref]0
# Invoke a scriptblock to attempt to change both values.
&{$i++;$iRef.Value++}
# Output the results.
"`$i = $i;`$iRef = $($iRef.Value)"
$i = 0;$iRef = 1
Solo se cambió la variable del tipo de referencia.
Consulte también
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de