2013-10-16 30 views
5

İşte sorun: Ana fonksiyonun ve ana işlev tarafından çağrılan birkaç iç fonksiyonun bulunduğu bir .m dosyasına sahibim.Komut isteminden .m dahili işlevi nasıl çağırılır?

Bu dahili işlevi (bunları test etmek için) konsoldan nasıl çağırabilirim?

örnek:

function main 
    function_1; 
    function_1; 
end 

function_1 
disp('this is'); 
end 

function_2 
    disp(' an example'); 
end 

nasıl konsoldan doğrudan test edebilir?

+0

[Matlab: yerel işlevleri komut satırından çağırıyor] olası kopyası (http://stackoverflow.com/questions/15461157/matlab-calling-local-functions-from-command-line) –

+1

Yerel işlevleriniz kendi ayrı birim testlerini gerektirecek şekilde dahil olabilirler, belki de kendi özel dosyalarına yerleştirmek için bir sebep vardır, belki de özel işlevler olarak? [Bu biraz ilgili soru] bulabilirsiniz (http: // stackoverflow.com/q/3569933/52738) yardımcıdır. – gnovice

+0

Yukarıda H.Muster tarafından atıfta bulunulan diğer cevap çok benzer, fakat cevabım bu amaç için yapılmış gibi görünen kullanışlı 'localfonksiyonlar komutunu tanıttı. Her zaman MATLAB'da olup olmadığını merak ediyorum. Her zaman dokümanlar içinde gördüğümü hatırlamıyorum. – chappjc

cevap

2

help function göre (ayrıca online doc bakınız):

Subfunctions tanımlandıkları dosya dışında görünmez.

  1. kesme noktası ayarlamak içinde bir noktada:

Yani .m dosyası içinden bunu yaparken sanki iç işleve erişmek için izin verecek olan bir kesme noktası gerek .m dosyasının ana işlevi
  • .m dosyasını çalıştırın.
  • K>> istemi görüntülendiğinde, konsoldan dahili işlevi çağırabilirsiniz.
  • 0

    Tasarımınıza uyduğu ve tüm işlevleri orada saklayıp paketinden çağırabiliyorsa, paket oluşturabilir misiniz? Bu makale size Hepatit olabilir: Aslında bunu kolu olduğunu varsa, tanımlandığı M dosyasının internal (local) function dışında kullanabilirsiniz http://www.mathworks.se/help/matlab/matlab_oop/scoping-classes-with-packages.html

    +0

    Teşekkürler ama bu ihtiyacım olan şey değil ... Bir birim testi kullanarak bir Matlab kodunu test etmem gerekiyor ve bu Matlab kodu çeşitli işlevlerden oluşur. Ben fonksiyonları ve alt fonksiyonu test etmek gerekir ... örnek: fonksiyonu ana function_1; function_1; end function_1 disp ('this is'); sonu function_2 disp ('bir örnek'); end – Bobo87

    2

    .

    >> [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! 
    >> 
    

    Yani, biz M dosyasının dışında iç işlevleri kullanabilirsiniz: Örneğin, aşağıdaki işlev

    % 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 
    

    Bir deneyelim, the localfunctions command ile tüm alt-fonksiyonlar için kolları döndürür. Bu işlevler, scopedfunctions tipindedir ve bunu MATLAB, parentage ve kaynak dosyasını izlediği için yapabilmekteyiz. Bu saplar üzerine the functions command çıktısını bakınız:

    Tabii
    >> functions(hl{1}) 
    ans = 
        function: 'subfun1' 
         type: 'scopedfunction' 
         file: 'E:\Users\jchappelow\Documents\MATLAB\internalHandlesTest.m' 
        parentage: {'subfun1' 'internalHandlesTest'} 
    

    , oldukça kolay iç fonksiyonları için yardıma görebilirsiniz:

    >> help internalHandlesTest>subfun1 
        still internalHandlesTest.m 
    

    Ancak yerel fonksiyonlarını çalıştırmak için, bir fonksiyon ele almak gerekiyor sadece kanonik fonksiyonun bir çıkış argümanıyla elde edilebilir.

    İlgili konular