2009-07-01 29 views
5

Tôi đang sử dụng các lớp và các phương thức tĩnh cho các hàm 'scope' trong một không gian tên, tương tự như C#. Tuy nhiên, mỗi lần tôi thêm một phương thức mới vào một lớp, lúc đầu nó không được tìm thấy. Tôi phải khởi động lại môi trường MATLAB (2007a) để các phương thức mới được nhận diện.Làm cách nào để MATLAB nhận ra các phương thức tĩnh mới được thêm vào?

Chắc chắn có lệnh 'cập nhật' hoặc 'làm mới' mà tôi có thể sử dụng để tôi không phải khởi động lại môi trường MATLAB mỗi khi tôi thêm hàm?

Trả lời

6

Phát hành cuộc gọi này để CLEAR nên làm điều đó:

hiệu lực thi hành
clear classes 

Một bên bất hạnh của việc này là nó cũng có hiệu quả các vấn đề một rõ ràng tất cả, mà sẽ xóa tất cả các biến trong không gian làm việc cũng như (Tuy nhiên, điều này sẽ xảy ra dù sao khi bạn đóng và khởi động lại MATLAB). Việc xóa không gian làm việc này thực sự phục vụ mục đích vì nó sẽ xóa mọi biến cùng loại với phiên bản của lớp học của bạn, có khả năng không hoạt động chính xác với phiên bản mới mới của lớp học của bạn.

Chức năng REHASH có thể hoạt động, nhưng tôi nghi ngờ điều đó (tôi nghĩ nó đề cập nhiều hơn với đường dẫn tệp hơn định nghĩa lớp).

+0

Điều đó có hiệu quả, cảm ơn! Liệu có thể làm điều này trên một lớp học cá nhân? – Brendan

+0

Theo như tôi biết, không có cách nào để sử dụng CLEAR để cập nhật các lớp riêng lẻ đã được sửa đổi. Đó là tất cả hay không! =) – gnovice

+1

Đã cố gắng phục hồi, không có tùy chọn nào hoạt động. Hãy nghĩ rằng các lớp học rõ ràng là cách duy nhất, cổ vũ! – Brendan

0

thử "clear classname"

+0

Tôi sợ điều này không làm việc, nó chấp nhận nó mà không có lỗi nhưng lớp không được cập nhật – Brendan

+0

Điều này [nên làm việc với các phiên bản mới hơn của MATLAB] (http://www.mathworks.de/help/techdoc/matlab_oop/brzqjky.html) –

1

Xóa các phiên bản của lớp học của bạn sẽ hoạt động.

Giả sử rằng bạn có một thể hiện của "MyClass" trong không gian làm việc cơ sở của bạn:

foo = MyClass; 

Bây giờ, giả sử bạn chỉnh sửa MyClass và thêm mới phương pháp tĩnh "bar":

foo.bar(); % Will cause error, as foo is instance of previous "MyClass" 

Tuy nhiên, "clear" -ing foo sẽ xóa tham chiếu đến lớp trước đó:

clear('foo'); 
foo = MyClass; 
foo.bar(); % this should now work. 

Điều này sẽ ổn nếu bạn chỉ có một hoặc hai phiên bản của lớp trong vùng làm việc cơ sở của bạn. Nếu bạn có nhiều trường hợp của lớp trong không gian làm việc cơ sở của bạn, sau đó bạn có thể muốn viết một kịch bản để xóa chúng:

varList = whos; 
for iVar = 1:numel(varList) 
    if isequal('MyClass', varList(iVar).class) 
     clear(varlist(iVar).name); 
    end 
end 
clear('varList'); 
clear('MyClass'); 

Nếu bạn có thể hiện của các lớp tại các địa điểm hơn, bạn có thể muốn mở rộng kịch bản khi thích hợp.

Cuộc gọi cuối cùng để xóa tên lớp có thể chỉ cần thiết nếu bạn đang thực hiện sửa đổi đối với các lớp trong hệ thống phân cấp thừa kế.

+0

cũng xem http://www.mathworks.de/help/techdoc/matlab_oop/brzqjky.html cũng liệt kê các trường hợp mà người dùng có thể dễ dàng quên (ví dụ: trong các hàm 'mlocked') –

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