Por que você pode importar um pacote * depois * usando seu conteúdo em uma função?
Estou no MATLAB R2014b e tenho uma pergunta que ilustrarei com o exemplo a seguir.
O MWE pode ser feito da seguinte forma oufaça o download como um arquivo .zip aqui.
Crie uma pasta de pacote+test
no seu caminho com quatro arquivos de função:
+test
a.m
b.m
c.m
d.m
Conteúdo dea.m
:
function a
disp 'Hello World!'
Conteúdo deb.m
:
function b
a
Se você correrb
na linha de comando, você precisará importar otest
primeiro pacote (import test.*
) ou executetest.b
.
Corridab
resultará em um erro, pois o escopo da funçãob
não contém funçãoa
. Nós devemos importá-lo antes que possa ser usado. Para isso eu crieic.m
:
function c
import test.*
a
Agora em execuçãoc
funciona bem.
Agora minha pergunta. Se eu mudarc.m
para (salvo emd.m
):
function d
a
import test.*
I.e. o comando de importação é emitidodepois de a chamada para a função de pacotea
. Corridad
ainda funciona perfeitamente, como se a posição do comando importd.m
não importa. A importação parece ter ocorrido antes da chamada para funcionara
, Em qued.m
acontece na linha antes da importação.
Por que isso acontece. Esse é o comportamento pretendido e quais são seus usos? Como e em que ordem o MATLAB lê um.m
arquivar e processá-lo? E mais fora de tópico, mas em geral: como a importação de pacotes é tratada em diferentes idiomas em comparação com o MATLAB, a ordem dos comandos é importante?
Minha conclusão preventiva com base nos comentários: provavelmente é uma prática recomendada usar apenas a função de importação no início do código MATLAB ou próximo a ele. Isso torna claramente visível que o conteúdo importado está disponível em todo o elemento (por exemplo, função). Também evita a suposição incorreta de que, antes da importação, o conteúdo ainda não está disponível ou se refere a algo diferente com o mesmo nome.