2009-02-02 16 views
9

Nói rằng tôi có đoạn mã sau:Có cách nào để gọi một chức năng phụ trong khi ở chế độ di động trong MATLAB?

% Cellmode_subfunction_test.m 
%% Cell 1 
foo(1); 

%% Cell 2 
foo(2); 

%% Definition of the foo subfunction 
function foo(num) 
disp(['num=' num2str(num)]); 

Làm thế nào có thể kiểm tra tế bào 1 và tế bào 2 với subfunction quy định tại cuối cùng?

Chỉnh sửa: Về cơ bản, mỗi ô trong ví dụ này thực hiện một số phép tính dài vì vậy tôi muốn kiểm tra và gỡ lỗi chúng một cách riêng biệt. Tôi đang sử dụng các hàm con để trừu tượng hóa và sử dụng lại chức năng phổ biến và cho đến nay chức năng này chỉ được sử dụng trong ứng dụng cụ thể này, tôi thực sự không muốn đặt foo trong một tệp m riêng biệt.

Chỉnh sửa (2): Tôi chỉ nhớ rằng tôi mơ hồ nhớ lại chế độ di động chỉ hoạt động trong tập lệnh MATLAB và không có trong các tệp m và chức năng con và hàm lồng nhau không được phép trong các tập lệnh đó. Vì vậy, những gì tôi yêu cầu có lẽ là không thể.

Mặc dù giải pháp chức năng ẩn danh được đưa ra dưới đây có lẽ hơi hạn chế vì nó chỉ cho phép các hàm biểu thức đơn, thực tế là đủ cho những gì tôi muốn làm và do đó tôi đã chấp nhận giải pháp cho vấn đề của mình.

+0

Rất tiếc, tôi không thể trợ giúp thêm. Chỉ cần rõ ràng hơn, bạn có muốn thêm các hàm con vào một tệp m, tệp này sẽ chỉ được sử dụng bởi tệp m đó và bạn không muốn tạo một tệp m hoàn toàn mới không? – gnovice

+0

Chỉnh sửa thứ hai của bạn làm rõ mọi thứ. Đó là sự thật, trong tập tin kịch bản bạn không thể có các chức năng con hoặc hàm lồng nhau. Các hàm ẩn danh là cách duy nhất để đi với các tập lệnh. Tùy chọn duy nhất khác là lưu foo dưới dạng tệp riêng biệt. – gnovice

Trả lời

5

CORRECTION:

Tôi hiểu lầm việc bạn sử dụng từ CELL. Lời xin lỗi của tôi. Có vẻ như bạn chỉ muốn xác định một hàm tại dòng lệnh mà không lưu nó vào tệp .m. Đối với điều này, bạn có thể sử dụng các chức năng ẩn danh:

foo = @(num) disp(['num=' num2str(num)]); 

Sau đó, bạn có thể sử dụng "foo" như bất kỳ chức năng nào khác.

+1

Đây không phải là trường hợp nếu bạn nhìn thấy mã được cung cấp. Đây là về khả năng đặt mã MATLAB trong các "ô" riêng biệt để dễ dàng phát triển. –

+0

Mã được cung cấp có phần không rõ ràng về điểm này. Bạn không thể đặt mã MATLAB trong các ô riêng biệt của một mảng ô. Bạn CÓ THỂ đặt các chốt chức năng trong một mảng ô, như: fhArray = {@ foo1, @ foo2}. – gnovice

+0

Thật không may đó không phải là những gì tôi đang cố gắng làm nhưng cảm ơn vì đã cố gắng giúp đỡ. – snth

0

Cách mà tôi thường xử lý đó là sử dụng dbstop ở đâu đó bên trong chức năng chính. Sau đó, bạn có quyền truy cập vào tất cả các chức năng mà chức năng chính thường có quyền truy cập. Nếu bạn đang làm việc với trình soạn thảo ML, chỉ cần sử dụng điểm ngắt tại cuộc gọi đầu tiên đến foo.

Hy vọng điều đó sẽ hữu ích.

Dan

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