Parámetros pasados por referencia y por
valor:
Paso por referencia
Los
parámetros se pasan por referencia o por valor al sistema de IDL y a los procedimientos
y funciones escritos por el usuari. Es importante reconocer la distinción entre estos dos métodos.
Supongamos
que las siguientes declaraciones se producen dentro de un programa IDL
s=10
t=15
r=myfun(s,t)
IDL
creará las variables s y t con los valores asignados. Se puede imaginar que la
memoria contienen estas variables. Para ser capaz de encontrar las variables
IDL tiene una tabla que contiene el nombre y la ubicación de cada variable. Cuando
se llama a la función de MyFun (s, t), IDL encuentra
la ubicación (dirección) de cada variable en esa tabla. A continuación
proporciona la ubicación de las variables de la función como argumentos.
Cuando
la función es evaluada por el sistema se utiliza la información de ubicación de
las variables para buscar su valor. A continuación, utiliza esa información
dentro de la función. Es posible modificar el valor de un parámetro durante la
evaluación de una función. Cuando la evaluación de una función se completa el
sistema escribe el nuevo valor de cada parámetro en su lugar de almacenamiento.
Una nueva llamada a la función encontrará el valor cambiado.
Un
ejemplo que utiliza este método es el siguiente:
FUNCTION switch,a,b
c=a
a=b
b=c
RETURN,c
END
La
secuencia de instrucciones:
s=10
t=15
r=switch(s,t)
hará que s tenga el valor 15, t el valor 10 y r el valor 10.
Un
resultado similar a SWITCH se podría obtener con el procedimiento:
PRO
swap,a,b,c
c=a
a=b
b=c
END
La
secuencia de instrucciones:
s=10
t=15
swap,s,t,r
en
este caso s tendrá el valor 15, t el valor 10 y r el valor 10. Una
ventaja del procedimiento sobre la función es que si no se utiliza r puede
usarse s y t en la declaración y funcionará igual de bien..
Paso
por valor:
Las
variables de expresiones, constantes, sistemas y de subíndice de referencias
se pasan por valor.
Esto
significa que el valor real de cualquiera de estos elementos, en lugar de pasarlo
a la memoria se pasa a las funciones y procedimientos. El valor está disponible
para los cálculos dentro de la función o procedimiento llamado.
Se
producirá un error si
intenta una función o procedimiento para cambiar un parámetro que recibe
información a través de paso por valor. Por ejemplo, considerar una llamada al
canje de procedimiento que se describe más arriba. Una declaración como
la de intercambio, 3,5 haría que el procedimiento para tratara de sustituir el
valor de
Si
A y B son matrices, entonces cualquier elemento, tal como a[3]
o b [3:7], se pasa por valor. Sin
embargo, toda la matriz se pasa por referencia. Por lo tanto, swap,a,b,
funcionará, pero swap,a[3],b[5] no lo hará. Esto es un problema cuando
realmente se quiere cambiar a [3] y b [5], pero es posible evitarlo con:
s=a[3] & t=b[5]
swap,s,t
a[3]=s & b[5]=t
Hmmm. Ve por qué funciona?
Ver Paso de
parámetros en el mecanismo de la ayuda IDL en línea para continuar el debate.