2010-01-11 44 views
5

Tôi đang cố gắng viết chức năng ghi nhật ký tổng quát cho tất cả các tham số đầu vào được chuyển đến một hàm trong MATLAB. Có thể dễ dàng chuyển tất cả các tham số đầu vào đến một hàm khác mà không cần đặt tên riêng cho các tham số không? Trong hàm ghi nhật ký, tôi có thể sử dụng inputname(i) trong vòng lặp for để lấy tên tham số. Tôi không muốn thực hiện logic này trong chức năng chính. Vì vậy, có cách nào để làm một cái gì đó như LogParams(allInputParams)?Tham số chức năng ghi nhật ký trong MATLAB

Trả lời

8

Có vẻ như bạn có chức năng chính, và từ chức năng đó bạn muốn gọi hàm LogParams để nhận danh sách tên của các biến được chuyển đến hàm chính. Dưới đây là một cách để bạn có thể thực hiện chức năng của bạn LogParams:

function names = LogParams 
    names = evalin('caller','arrayfun(@inputname,1:nargin,''UniformOutput'',0)'); 
end 

Sản lượng trở về từ LogParams sẽ là một mảng ô chứa tên của các biến truyền cho hàm mà các cuộc gọi LogParams. Giải pháp trên sử dụng các chức năng sau:

  • EVALIN: để đánh giá biểu thức trong không gian làm việc của chức năng gọi.
  • ARRAYFUN: thay thế cho vòng lặp for.
  • NARGIN: để nhận được số đối số được chuyển đến một hàm.
  • INPUTNAME: để lấy tên của biến đầu vào.

Như một minh hoạ về cách LogParams công trình, tạo ra các chức năng sau đó gọi nó là:

function main_function(a,b,varargin) 
    disp(LogParams); 
end 

và bây giờ gọi nó với một số nguyên liệu đầu vào (giả sử các biến x, y, và z được định nghĩa trong không gian làm việc):

>> main_function(x,y) 
    'x' 'y' 

>> main_function(x,y,z) 
    'x' 'y' 'z' 

>> main_function(x,y,z,z,z,z) 
    'x' 'y' 'z' 'z' 'z' 'z' 
+0

Rất gọn gàng! .......... (dấu chấm đến từ 15 ký tự) –

+0

Cảm ơn. Những sự giúp đỡ đó. –

+0

+1 cho tác động tối thiểu đến chức năng gọi. – Marc

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