2013-10-16 14 views
5

Đây là vấn đề: Tôi có một tập tin .m để kiểm tra trong đó có một chức năng chính và một số chức năng nội bộ được gọi là chính.Cách gọi hàm nội bộ của dấu phẩy từ dấu nhắc lệnh?

Làm cách nào để gọi hàm bên trong này (để kiểm tra chúng), từ bảng điều khiển?

dụ:

function main 
    function_1; 
    function_1; 
end 

function_1 
disp('this is'); 
end 

function_2 
    disp(' an example'); 
end 

Làm thế nào tôi có thể kiểm tra trực tiếp từ giao diện điều khiển?

+0

bản sao có thể có của [Matlab: gọi các hàm cục bộ từ dòng lệnh] (http://stackoverflow.com/questions/15461157/matlab-calling-local-functions-from-command-line) –

+1

Nếu các hàm cục bộ của bạn liên quan đến việc yêu cầu các bài kiểm tra đơn vị riêng biệt của họ, có lẽ có lý do để đặt chúng trong các tệp riêng biệt của họ, có thể là các hàm riêng tư? Bạn có thể tìm thấy [câu hỏi hơi liên quan này] (http: // stackoverflow.com/q/3569933/52738) hữu ích. – gnovice

+0

Câu trả lời khác được đề cập ở trên bởi H.Muster là rất giống nhau, nhưng câu trả lời của tôi giới thiệu các lệnh 'localfunctions' hữu ích mà dường như được xây dựng cho mục đích này. Tôi tự hỏi nếu nó đã luôn luôn được trong MATLAB. Tôi không nhớ lúc nào cũng nhìn thấy nó trong tài liệu. – chappjc

Trả lời

2

Theo help function (xem thêm các online doc):

Subfunctions không nhìn thấy được bên ngoài tập tin mà chúng được định nghĩa.

Vì vậy, bạn cần một breakpoint, mà sẽ cho phép bạn truy cập vào các chức năng nội bộ như thể bạn đang làm việc đó từ bên trong file .m:

  1. Đặt một breakpoint tại một số điểm trong chức năng chính của tệp .m
  2. Chạy tệp .m
  3. Khi lời nhắc K>> xuất hiện, bạn có thể gọi hàm nội bộ từ bảng điều khiển.
0

Có thể bạn có thể tạo gói nếu nó phù hợp với thiết kế của bạn và giữ tất cả các chức năng ở đó và gọi chúng từ gói đó. Bài viết này có thể Hep bạn: http://www.mathworks.se/help/matlab/matlab_oop/scoping-classes-with-packages.html

+0

Cảm ơn nhưng đây không phải là những gì tôi cần ... Tôi cần phải kiểm tra một mã Matlab bằng cách sử dụng kiểm tra đơn vị và mã Matlab này được tạo thành từ một số chức năng. Tôi cần kiểm tra chức năng và chức năng con ... ví dụ: chức năng chính function_1; function_1; kết thúc function_1 disp ('this is'); kết thúc function_2 disp ('một ví dụ'); kết thúc – Bobo87

2

Bạn thực sự có thể sử dụng một bên ngoài internal (local) function của tập tin M, trong đó nó được định nghĩa, nếu bạn có nó xử lý. Ví dụ, hàm sau trả về xử lý cho tất cả các subfunctions với 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 

Hãy thử nó:

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

Vì vậy, chúng ta có thể sử dụng chức năng nội bộ bên ngoài của tập tin M. Các hàm này thuộc loại scopedfunctions và chúng tôi có thể thực hiện điều này vì MATLAB theo dõi nó là parentage và tệp nguồn. Xem kết quả của the functions command bằng các xử lý:

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

Tất nhiên, bạn có thể thấy sự giúp đỡ cho các chức năng nội bộ khá dễ dàng:

>> help internalHandlesTest>subfun1 
    still internalHandlesTest.m 

Nhưng để chạy chức năng địa phương, bạn cần phải nhận được một chức năng xử lý , chỉ có thể nhận được thông qua một đối số đầu ra của hàm chuẩn.

Các vấn đề liên quan