Curso de Raku / Avanzado / Contenedores / Introspección de contenedores
WHO y HOW
Dos herramientas de introspección más completan el conjunto:
HOW y WHO.
HOW
Cada valor en Raku está respaldado por un metaobjeto, un
objeto que sabe cómo funciona el tipo del valor. HOW
(abreviatura de Higher Order Workings) devuelve ese
metaobjeto:
my $x = 42;
say $x.HOW.^name; # Perl6::Metamodel::ClassHOWHas estado usando el metaobjeto todo el tiempo, quizás sin darte
cuenta. El .^ en .^name es una llamada a
método que se enruta a través de HOW. Estas dos líneas son
equivalentes:
my $x = 42;
say $x.^name; # Int
say $x.HOW.name($x); # IntAsí que $x.^name es simplemente una forma más corta de
escribir $x.HOW.name($x). Observa que el objeto se pasa de
nuevo como argumento: el metaobjeto es compartido por cada
valor del tipo, así que a un meta-método se le indica sobre qué objeto
se le está preguntando. La forma .^ hace esto
automáticamente. (Para name, el argumento se ignora, pero
pasarlo es la forma correcta y general; algunos meta-métodos sí lo
utilizan.)
Lo mismo aplica a otros meta-métodos que puedas encontrar, como
.^methods, que lista los métodos a los que un valor
responde.
WHO
WHO devuelve el paquete al que pertenece un
nombre, es decir, la tabla de símbolos definidos en ese espacio de
nombres:
say Int.WHO.^name; # StashUn Stash (un hash de tabla de símbolos) se vuelve útil
cuando trabajas con módulos, donde te permite buscar los nombres que un
módulo define. Volveremos a esto en la sección sobre módulos;
por ahora, es suficiente saber que WHO existe y qué
representa.
Navegación del curso
← Usando
VAR | Describir
una variable →
💪 O ve directamente a los ejercicios de esta
sección.