5

問題は次のとおりです。メイン関数とメイン関数によって呼び出されるいくつかの内部関数があるテストする .m ファイルがあります。

コンソールからこの内部関数を (テストするために) 呼び出すにはどうすればよいですか?

例:

function main
   function_1;
   function_1;
end

function_1
disp('this is');
end

function_2
  disp(' an example');
end

コンソールから直接テストするにはどうすればよいですか?

4

3 に答える 3

2

ハンドルがあれば、定義されている 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

ただし、ローカル関数を実行するには、正規関数の出力引数を介してのみ取得できる関数ハンドルを取得する必要があります。

于 2013-10-16T18:17:46.000 に答える
2

によるとhelp functionオンラインドキュメントも参照):

サブ関数は、それらが定義されているファイルの外では表示されません。

したがって、ブレークポイントが必要です。これにより、.m ファイル内から実行しているかのように内部関数にアクセスできます。

  1. .m ファイルのメイン関数内のあるポイントにブレークポイントを設定します
  2. .m ファイルを実行します。
  3. プロンプトが表示されたらK>>、コンソールから内部関数を呼び出すことができます。
于 2013-10-16T11:13:35.923 に答える
0

デザインに適合する場合はパッケージを作成し、そこにすべての関数を保持して、そのパッケージから呼び出すことができます。この記事が役に立つかもしれません: http://www.mathworks.se/help/matlab/matlab_oop/scoping-classes-with-packages.html

于 2013-10-16T11:17:12.870 に答える