Сделать функции рыбы приватными

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

Как я могу скрыть их от автоматического завершения и ограничить их область до private?

function outer
   function inner_func
       echo "I still find this function via automplete"
   end
end

person oschrenk    schedule 01.08.2014    source источник


Ответы (1)


Fish не имеет приватных функций, но возможно, эта функция будет доступна в будущих версиях. А пока попробуйте использовать следующий прием, соглашение об именовании или и то, и другое.

functions -e function_name

Очень близко к тому, что вам нужно. Вы можете использовать functions -e function_name перед концом блока, чтобы стереть его из глобальной области видимости.

function outer
    function inner_func
        echo "I still find this function via automplete."
        echo "Not anymore!!"
        functions -e inner_func
    end
    # Let's test this!
    inner_func
end


$ outer
I still find this function via automplete.
Not anymore!!
$ inner_func
fish: Unknown command 'inner_func'

Соглашение об именовании

  • _my_module_func_name

Это не удаляет функцию из глобальной области видимости, но рекомендуется избегать непреднамеренного переопределения существующих функций.

Заметки

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

person Jorge Bucaran    schedule 26.12.2014