2008-11-07 19 views
21

tôi đã tạo ra một lớp MATLAB, một cái gì đó như:Làm thế nào để thay đổi thuộc tính của một đối tượng Matlab

classdef myclass 

    properties 
     x_array = []; 
    end 

    methods 
    function increment(obj,value) 
     obj.x_array = [obj.x_array ; value); 
    end 
    end 
end 

Vấn đề là, tài sản x_array không bao giờ được sửa đổi khi tôi gọi increment() chức năng: ví dụ:

Tôi đã thực hiện một số nghiên cứu và tôi đã đạt được kết luận rằng vì MATLAB sử dụng Bản sao Lười biếng cho các đối tượng, khiến lớp của tôi kế thừa lớp HANDLE nên đã giải quyết vấn đề này, nhưng không ai biết tại sao đây là hạnh phúc ning? Và nếu mở rộng lớp xử lý được xem là giải pháp, đây có phải là cách đúng để thực hiện:

classdef myclass < handle 

hoặc có thêm bước nào không?

+0

gần như trùng lặp với http://stackoverflow.com/questions/209005/object-oriented-matlab-properties – Azim

Trả lời

22

Điều này tương tự như this question. Tóm lại, tất cả những gì bạn cần làm là thừa kế từ lớp xử lý.

dụ nhanh

Nội dung của tập tin myclass.m

classdef myclass<handle 
    properties 
     x_array = [] 
    end 
    methods 
     function obj=increment(obj,val) 
      obj.x_array=[obj.x_array val]; 
     end 
    end 
end 

Bây giờ từ dấu nhắc lệnh Matlab, bạn có thể làm như sau

>> s=myclass; 
>> s.increment(5) 
>> s.increment(6) 
>> s 

s = 

myclass handle 

properties: 
    x_array: [5 6] 

lists of methods, events, superclasses 
-1

Có một cách dễ dàng hơn. Bạn chỉ cần ghi đè dụ ban đầu của bạn s như sau:

s= s.x_array 

biết thêm thông tin ở đây: http://uk.mathworks.com/help/matlab/matlab_oop/matlab-vs-other-oo-languages.html#bslvcv1

PS: Trong khi nó là tốt để sử dụng xử lý, chức năng cách sao chép các công trình là khác nhau và bạn nên cẩn thận về cách bạn sử dụng nó. Khi bạn sử dụng xử lý, thực tế bạn đang tạo địa chỉ/tham chiếu mới cho một obj