Подтвердить что ты не робот

Z Shell "автозагрузка" встроена - для чего это полезно?

Я уже некоторое время использую оболочку Z, и мне становится любопытно. Одна вещь, которую я наткнулся при написании своих собственных функций, - "автозагрузка".

В соответствии с zshbuiltins (1) man-страница autoload эквивалентна functions -u "(с исключением), что эквивалентно typeset -f" (с исключением). Однако, посмотрев на использование автономной загрузки, скажем functions/Prompts/promptinit, я думаю, что у меня есть идея, что она делает.

Я думаю об автозагрузке, как, ну, вроде оператора import.

Но почему "autoload foo" превосходит "строку источника"? Я этого не понимаю.

4b9b3361

Ответ 1

Как указано в документации zsh:

Функция может быть отмечена как undefinedиспользуя встроенную автозагрузку (или functions -u или typeset -fu). такие функция не имеет тела. Когда функция сначала выполняется, оболочка ищет свое определение, используя элементов переменной fpath. [...]

autoload позволяет указать функции без тела, которые затем автоматически загружаются при использовании;)

source, однако принимает в качестве аргумента script, который затем executed в среде текущего сеанса, то есть вы сохраните все изменения, сделанные script для среды, это не тот случай, когда выполняется только script.

Я думаю, что эта функция полезна при использовании лотов утилит в функциях. Он позволяет быстрее запускать (весь код для функций автозагрузки не нужно загружать) и может уменьшить объем памяти в памяти оболочки.