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 3 a 5 y viceversa. Esto no tiene sentido, y es un error. Por lo tanto, no hay es posible pasar por valor el cambio de parámetros.

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.