2011-08-27 36 views
7

Tôi cố gắng để vẽ chuỗi, tôi đã viết một hàmLàm thế nào để quá tải các hàm do người dùng định nghĩa trong Matlab?

function show_seq(seq) 
plot (seq) 
end 

bây giờ tôi muốn quá tải show_seq này để hiển thị 2 chuỗi giống như

function show_seq(seq1, seq2) 
    plot(seq1,'color','r'); 
    plot(seq2, 'color', 'b'); 
end 

nhưng điều này không làm việc, không ai có ý tưởng về làm thế nào để quá tải chức năng trong MATLAB?

+0

liên quan: http://stackoverflow.com/questions/8630889/overloading-functions/8631335 # 8631335 –

Trả lời

10

Bạn có thể quá tải một trong các chức năng của riêng mình nếu bạn đặt chức năng quá tải trong đường dẫn có mức ưu tiên cao hơn. Để biết thêm chi tiết về ưu tiên đường dẫn, hãy xem this question.

Tuy nhiên, trong trường hợp của bạn, đơn giản nhất sẽ được sửa đổi show_seq để nó chấp nhận nhiều đầu vào tùy chọn:

function show_seq(varargin) 
    hold on %# make sure subsequent plots don't overwrite the figure 
    colors = 'rb'; %# define more colors here, 
       %# or use distingushable_colors from the 
       %# file exchange, if you want to plot more than two 

    %# loop through the inputs and plot 
    for iArg = 1:nargin 
     plot(varargin{iArg},'color',colors(iArg)); 
    end 
end 
+21

Chúa Giêsu, vì vậy bạn không thể chỉ cần đặt hai quá tải trong một tập tin như bạn sẽ làm trong mọi ngôn ngữ khác tôi đã đi qua cho đến nay? – Grzenio

+2

@Grzenio: Không có thủ thuật, bạn thực sự không thể đặt nhiều chức năng độc lập trong một tệp. Tuy nhiên, bạn có thực sự nghĩ rằng việc sao chép và dán hầu hết các chức năng nhiều lần cho các chữ ký khác nhau có dễ dàng và hiệu quả hơn không, thay vì viết một hàm có thể xử lý nhiều chữ ký? – Jonas

+15

Trong các ngôn ngữ lập trình thông thường, bạn thường tạo một hàm với tất cả các tham số có thể thực hiện, và một vài hàm với các tham số chuyên biệt hơn, chỉ cần điều chỉnh các tham số, cung cấp một số giá trị mặc định, vv. . Điều chính bạn sao chép-dán là, tốt, tên hàm ... – Grzenio

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