Могу ли я импортировать пространство имен глобально, без явного вызова import в каждой функции? - PullRequest
7 голосов
/ 16 января 2012

Чтобы избежать вздутия пространства имен, я использую пакеты.Например, пусть Foo будет функцией в пакете с именем FooPackage

function Foo()
   disp('Foo');
end

Я хочу использовать эту функцию в другой функции с именем Bar.

function Bar()
    InFunc1();
    InFunc2();
    InFunc3();
end

thisфункция вызывает подфункции.Наивный способ заключается в явном произнесении имени пакета в каждом вызове

 function InFunc1()
    FooPackage.Foo();
end

function InFunc2()
   FooPackage.Foo();
end

function InFunc3()
   FooPackage.Foo();
end

В качестве альтернативы я могу использовать импорт для каждой функции:

 function InFunc1()
    import FooPackage.*
    Foo();
end

function InFunc2()
    import FooPackage.*
    Foo();
end

function InFunc3()
    import FooPackage.*
    Foo();
end

Оба способа исчерпывают.Ответ в здесь говорит, что это единственный способ.У кого-нибудь есть лучшее предложение?

1 Ответ

4 голосов
/ 16 января 2012

Может быть, вы могли бы использовать каталог private.Функции в каталоге private видны только функциям в его родительском каталоге, и они могут вызываться только по их именам.

Это не вполне удовлетворительное решение, но это может помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...