Tcl - Espacios de nombres
El espacio de nombres es un contenedor para un conjunto de identificadores que se utiliza para agrupar variables y procedimientos. Los espacios de nombres están disponibles a partir de la versión 8.0 de Tcl. Antes de la introducción de los espacios de nombres, existía un único ámbito global. Ahora, con los espacios de nombres, tenemos particiones adicionales de alcance global.
Crear espacio de nombres
Los espacios de nombres se crean utilizando el namespacemando. A continuación se muestra un ejemplo simple para crear un espacio de nombres:
#!/usr/bin/tclsh
namespace eval MyMath {
# Create a variable inside the namespace
variable myResult
}
# Create procedures inside the namespace
proc MyMath::Add {a b } {
set ::MyMath::myResult [expr $a + $b]
}
MyMath::Add 10 23
puts $::MyMath::myResult
Cuando se ejecuta el código anterior, produce el siguiente resultado:
33
En el programa anterior, puede ver que hay un espacio de nombres con una variable myResult y un procedimiento Add. Esto hace posible crear variables y procedimientos con los mismos nombres en diferentes espacios de nombres.
Espacios de nombres anidados
Tcl permite la anidación de espacios de nombres. A continuación se ofrece un ejemplo sencillo para anidar espacios de nombres:
#!/usr/bin/tclsh
namespace eval MyMath {
# Create a variable inside the namespace
variable myResult
}
namespace eval extendedMath {
# Create a variable inside the namespace
namespace eval MyMath {
# Create a variable inside the namespace
variable myResult
}
}
set ::MyMath::myResult "test1"
puts $::MyMath::myResult
set ::extendedMath::MyMath::myResult "test2"
puts $::extendedMath::MyMath::myResult
Cuando se ejecuta el código anterior, produce el siguiente resultado:
test1
test2
Importación y exportación de espacios de nombres
Como puede ver en los ejemplos de espacios de nombres anteriores, usamos muchos operadores de resolución de alcance y es más complejo de usar. Podemos evitar esto importando y exportando espacios de nombres. A continuación se da un ejemplo:
#!/usr/bin/tclsh
namespace eval MyMath {
# Create a variable inside the namespace
variable myResult
namespace export Add
}
# Create procedures inside the namespace
proc MyMath::Add {a b } {
return [expr $a + $b]
}
namespace import MyMath::*
puts [Add 10 30]
Cuando se ejecuta el código anterior, produce el siguiente resultado:
40
Olvidar el espacio de nombres
Puede eliminar un espacio de nombres importado utilizando forgetsubcomando. A continuación se muestra un ejemplo sencillo:
#!/usr/bin/tclsh
namespace eval MyMath {
# Create a variable inside the namespace
variable myResult
namespace export Add
}
# Create procedures inside the namespace
proc MyMath::Add {a b } {
return [expr $a + $b]
}
namespace import MyMath::*
puts [Add 10 30]
namespace forget MyMath::*
Cuando se ejecuta el código anterior, produce el siguiente resultado:
40