Cách đúng thực sự là bằng phương tiện của một hàm is*
, cụ thể là isa
:
if isa(f, 'function_handle')
% f is a handle
else
% f is not a handle
end
chỉnh sửa: Để hoàn thành, tôi muốn chỉ ra rằng việc sử dụng class()
hoạt động để kiểm tra xem có điều gì đó là một chức năng xử lý hay không. Tuy nhiên, không giống như isa
, điều này không tổng quát tốt với các khía cạnh khác của MATLAB như lập trình hướng đối tượng (OOP) đang có tác động ngày càng tăng về cách MATLAB hoạt động (ví dụ: chức năng cốt truyện, hộp công cụ kiểm soát, hộp công cụ nhận dạng, ... chủ yếu dựa trên OOP).
Đối với những người quen thuộc với OOP: isa
cũng kiểm tra các loại siêu đối tượng x
cho someClass
, trong khi strcmp(class(x), 'someClass')
chỉ kiểm tra chính xác loại.
Đối với những người không biết OOP: Tôi khuyên bạn nên sử dụng isa(x, 'someClass')
thay vì strcmp(class(x), 'someClass')
vì đó là hành vi thuận tiện nhất (và phổ biến) của cả hai.
Xem thêm [câu hỏi này] (http://stackoverflow.com/q/19307726/2778484), kiểm tra tính hợp lệ (có mã để trả lại) cũng như là một hàm xử lý. – chappjc