inicio | documentación | contacto
Version para imprimir Imprimir
Inicio » Documentación » Contexto local

Contexto local

El contexto local es el espacio de memoria reservado que existe solo durante la ejecución de una función o método. El contexto local se crea cuando se llama a la función o método y se destruye cuando finaliza. Cada función tiene su propio contexto local y solo puede acceder al contexto propio, ya que es totalmente privado. El contexto local guarda el nombre de la función llamada, los parámetros y las variables locales.

  • #funcname: nombre de la función llamada
  • #args: array con los parámetros recibidos (solo sus valores)
  • #local: mapa con todo el contexto local: variables locales y parámetros (nombre de la variable y valor)

Nombre de la función o método actual #funcname

#funcname es una variable especial de solo lectura que solamente existe dentro de las funciones/métodos y contiene el nombre utilizado para llamar a la función (que debe coincidir con uno de los nombres de la misma). Es útil cuando se llama a una función que tiene varios nombres.

En este ejemplo, hay una función con dos nombres saluda y saludame. Dado que el código de la función es el mismo, debemos comprobar como ha sido llamado y cambiar el mensaje en consecuencia:

def main
    println saluda()
    println saludame()
end

def saluda, saludame()
    if #funcname == "saluda"
        println "Hola mundo!"
    else
        println "Hola Alberto"
    endif
end

El resultado es:

Hola mundo
Hola Alberto!

Parámetros dinámicos: #args

#args es una variable especial de solo lectura que solamente existe dentro de las funciones y contiene en un Array todos los parámetros recibidos. Es un Array (ver arrays) y, como tal, solo se puede acceder a cada uno de sus elementos a través de índices numéricos, como #args[n], siendo n un número comprendido entre 0 y el tamaño máximo del array -1. Se puede acceder a su tamaño con las propiedades #args.length o con #args.size

def main
    cosas()
    cosas(1, "hola", 5, true)
end

def cosas()
    local num
    println "Se han recibido "+#args.size+" parámetros."
    foreach num : #args
        println num
    endfor
end

El resultado es:

Se han recibido 0 parámetros.
Se han recibido 4 parámetros.
1
hola
5
true
hola

Contexto local: #local

#local es una variable especial de solo lectura que solamente existe dentro de las funciones y contiene en un Map todas las variables del contexto local: los parámetros recibidos (#args) y las variables locales (las que se defien en local). A diferencia de #args (que es un Array) #local es un mapa (ver mapas hash) y, como tal, se puede acceder a todos sus elementos a partir de su nombre, como #local.variable o #local.nombreParametro. También se puede acceder a su tamaño con los métodos #local.size() o #local.length()

Ejemplo de acceso directo a las variables locales y parámetros del contexto. Da igual usar #local o no, ya que las variables locales tienen siempre preferencia (ver orden de prioridad de acceso a variables en metodos y funciones)

def main
    mas("Alberto", 12)
end

def cosas(nombre, edad)
    local otra
    otra = "hola"

    println otra
    println nombre
    println edad

    println #local.otra
    println #local.nombre
    println #local.edad
end

Otro ejemplo. Acceso dinámico a las variables del contexto local. Dado que #local es un mapa, podemos acceder a sus elementos a través de la clave de manera dinámica, indicando la clave entre corchetes.

Ejemplo que averigua el nombre de todas las variables locales y pinta su contenido.

 def main
    mas("Alberto", 12)
end

def mas(nombre, edad)
    local otra, variable
    otra = "hola"

    println "Tamaño del contexto local completo "+#local.size()+" elementos." 
    println "Contenido:"

    foreach variable : #local.keys()
        println "Nombre = "+variable+", valor = " + #local[ variable ]
    endfor
 
end

El resultado es:

Tamaño del contexto local completo 4 elementos.
Contenido:
Nombre = otra, valor = hola
Nombre = variable, valor = variable
Nombre = nombre, valor = Alberto
Nombre = edad, valor = 12
Última modificación: miércoles 14 de mayo de 2008 15:28:18
Fecha de creación: sábado 24 de noviembre de 2007 21:03:12
Categorías: