Làm cách nào để khai báo hàm trong MATLAB với các đối số tùy chọn?Tùy chọn args trong các hàm MATLAB
Ví dụ: function [a] = train(x, y, opt)
, trong đó lựa chọn phải là đối số tùy chọn.
Làm cách nào để khai báo hàm trong MATLAB với các đối số tùy chọn?Tùy chọn args trong các hàm MATLAB
Ví dụ: function [a] = train(x, y, opt)
, trong đó lựa chọn phải là đối số tùy chọn.
Có một vài tùy chọn khác nhau về cách thực hiện việc này. Điều cơ bản nhất là sử dụng varargin
và sau đó sử dụng nargin
, size
v.v. để xác định xem các đối số tùy chọn đã được chuyển cho hàm hay chưa.
% Function that takes two arguments, X & Y, followed by a variable
% number of additional arguments
function varlist(X,Y,varargin)
fprintf('Total number of inputs = %d\n',nargin);
nVarargs = length(varargin);
fprintf('Inputs in varargin(%d):\n',nVarargs)
for k = 1:nVarargs
fprintf(' %d\n', varargin{k})
end
Một giải pháp tìm kiếm thanh lịch hơn một chút là sử dụng lớp học inputParser
để xác định tất cả các đối số mà bạn yêu cầu, cả bắt buộc và tùy chọn. inputParser
cũng cho phép bạn thực hiện kiểm tra kiểu trên tất cả các đối số.
Cách đơn giản để làm điều này là thông qua nargin (N đối số trong). Nhược điểm là bạn phải chắc chắn rằng danh sách đối số của bạn và kiểm tra nargin phù hợp.
Điều đáng ghi nhớ là tất cả đầu vào là tùy chọn, nhưng các hàm sẽ thoát với lỗi nếu nó gọi biến không được đặt. Ví dụ sau đặt mặc định cho b và c. Sẽ thoát nếu không có mặt.
function [ output_args ] = input_example(a, b, c)
if nargin < 1
error('input_example : a is a required input')
end
if nargin < 2
b = 20
end
if nargin < 3
c = 30
end
end
Một cách tốt để đi về việc này không phải là để sử dụng nargin
, nhưng để kiểm tra xem các biến đã được thiết lập sử dụng exist('opt', 'var')
.
Ví dụ:
function [a] = train(x, y, opt)
if (~exist('opt', 'var'))
opt = true;
end
end
Xem câu trả lời này cho ưu điểm trong việc thực hiện nó theo cách này: How to check whether an argument is supplied in function call?
thể trùng lặp của [Mặc định luận cứ trong Matlab] (http://stackoverflow.com/questions/795823/ default-arguments-in-matlab), [Tương đương Matlab của "None") của Python (http://stackoverflow.com/questions/1737523/the-matlab-equivalent-of-pythons-none), [Cách xử lý cặp tên/giá trị của đối số hàm trong MATLAB] (http://stackoverflow.com/questions/2775263/how-to-deal-with-name-value-pairs-of-function-arguments-in-matlab) – Amro
Thảo luận tốt của h http://blogs.mathworks.com/pick/2010/04/02/setting-default-values/ và tại đây http://blogs.mathworks.com/loren/2009/05/05/nice-way-to -set-function-defaults / –