2011-10-23 24 views
16

Làm thế nào để kiểm tra/xác nhận một biến là một chức năng xử lý trong MATLAB?làm thế nào để kiểm tra một biến là một chức năng xử lý hay không trong Matlab

nó có thể là một cái gì đó như:

[email protected](x)x+1 
isFunctionHandle(f) 

các is* build-in chức năng dường như không hỗ trợ những thử nghiệm loại? có ai biết không? cảm ơn nhiều

+0

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

Trả lời

29

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.

4

Bạn có thể sử dụng class() chức năng:

f = @(x)x+1 

f = 

    @(x)x+1 

>> class(f) 

ans = 

function_handle 

(Đây là một chuỗi có chứa dòng chữ 'function_handle')

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