È effettivamente possibile utilizzare un internal (local) function al di fuori del file M in cui è definito, se si dispone è maniglia. Ad esempio, la seguente funzione restituisce le maniglie a tutte le sottofunzioni con the localfunctions
command,
% internalHandlesTest.m
function [out,hl] = internalHandlesTest(in)
out = subfun1(in);
% hl = @subfun1; % just to get one internal function handle
hl = localfunctions; % to get all internal function handles
end
function subout = subfun1(subin)
% still internalHandlesTest.m
fprintf('You are using internalHandlesTest>subfun1!\n');
subout = subin;
end
function subfun2()
% still internalHandlesTest.m
fprintf('You are using internalHandlesTest>subfun2!\n');
end
Proviamo:
>> [out,hl] = internalHandlesTest(0);
You are using internalHandlesTest>subfun1!
>> disp(hl)
@subfun1
@subfun2
>> hl{1}(1)
You are using internalHandlesTest>subfun1!
ans =
1
>> hl{2}()
You are using internalHandlesTest>subfun2!
>>
Quindi, siamo in grado di utilizzare le funzioni interne al di fuori del file M. Queste funzioni sono di tipo scopedfunctions
e siamo in grado di farlo perché MATLAB tiene traccia di esso è parentage
e il file di origine. Vedere l'uscita di the functions
command su queste maniglie:
>> functions(hl{1})
ans =
function: 'subfun1'
type: 'scopedfunction'
file: 'E:\Users\jchappelow\Documents\MATLAB\internalHandlesTest.m'
parentage: {'subfun1' 'internalHandlesTest'}
Naturalmente, è possibile consultare la guida per le funzioni interne abbastanza facilmente:
>> help internalHandlesTest>subfun1
still internalHandlesTest.m
Ma per eseguire funzioni locali, è necessario ottenere un handle funzione , che può essere ottenuto solo tramite un argomento di output della funzione canonica.
possibile duplicato di [Matlab: chiamata funzioni locali dalla riga di comando] (http://stackoverflow.com/questions/15461157/matlab-calling-local-functions-from-command-line) –
Se le funzioni locali sono tali coinvolti in modo da richiedere i propri test unitari separati, forse c'è motivo di metterli nei loro file separati, magari come funzioni private? È possibile trovare [questa domanda in qualche modo correlata] (http: // StackOverflow.it/q/3569933/52738) utile. – gnovice
L'altra risposta di cui sopra di H.Muster è molto simile, ma la mia risposta introduce l'utile comando 'localfunctions' che sembra essere costruito per questo scopo. Mi chiedo se sia sempre stato in MATLAB. Non ricordo di averlo visto sempre nei documenti. – chappjc