2010-12-20 13 views
20

He estado usando la capa Z por un tiempo, y estoy comenzando a sentir curiosidad. Una cosa con la que me he tropezado al escribir mis propias funciones es "autocarga".Z Shell "autoload" integrado - ¿para qué sirve?

Según los zshbuiltins (1) hombre página autoload es "equivalente a functions -u" (con una excepción), que es "equivalente a typeset -f" (con una excepción). Sin embargo, después de ver el uso de autlooad, digamos functions/Prompts/promptinit, creo que tengo una idea de lo que hace.

Pienso en autocarga como, bueno, tipo de declaración de "importación".

Pero ¿por qué "autoload foo" es superior a "source bar"? No entiendo eso.

Respuesta

25

como se indica en la zsh documentation:

Una función puede ser marcado como indefinido usando la orden interna de carga automática (o functions -u o typeset -fu). Tal una función no tiene cuerpo. Cuando la función se ejecuta por primera vez, el shell busca su definición utilizando los elementos de la variable fpath. [...]

autoload permite para las funciones que se especificarán sin un cuerpo que a continuación se cargan automáticamente cuando se utiliza;)

source sin embargo toma como argumento una secuencia de comandos que es entonces executed en el entorno de la sesión actual, es decir, conservará todos los cambios que la secuencia de comandos hace al entorno, que no es el caso cuando acaba de ejecutar la secuencia de comandos.

creo que esta característica es beneficiosa cuando se tiene una gran cantidad de los servicios públicos en funciones. Permite iniciar más rápido (no es necesario cargar todo el código de las funciones de autocarga) y puede mantener la huella de memoria del shell más pequeña.

+1

Ah, inicio más rápido; no pensé en eso. ¡Gracias! – Mitro