ハンドルがあれば、定義されている M ファイルの外部で内部 (ローカル) 関数を実際に使用できます。たとえば、次の関数は、コマンドですべてのサブ関数へのハンドルを返します。localfunctions
% 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
試してみよう:
>> [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!
>>
したがって、M ファイルの外部で内部関数を使用できます。これらの関数は 型であり、MATLAB がその関数とソース ファイルscopedfunctions
を追跡しているため、これを行うことができます。これらのハンドルに対するコマンドparentage
の出力を参照してください。functions
>> functions(hl{1})
ans =
function: 'subfun1'
type: 'scopedfunction'
file: 'E:\Users\jchappelow\Documents\MATLAB\internalHandlesTest.m'
parentage: {'subfun1' 'internalHandlesTest'}
もちろん、内部関数のヘルプは非常に簡単に表示できます。
>> help internalHandlesTest>subfun1
still internalHandlesTest.m
ただし、ローカル関数を実行するには、正規関数の出力引数を介してのみ取得できる関数ハンドルを取得する必要があります。