2017-09-15 30 views
5

Tôi đang viết một tập lệnh Matlab, trong đó tôi có một loạt các đối tượng của cùng một lớp tự định nghĩa, nói A, BC. Sau đó, tôi có một chức năng làm việc trên bất kỳ của 2 đối tượng, như func(A,B).Làm thế nào để tạo một mảng con trỏ tới các đối tượng trong Matlab?

Bây giờ tôi muốn chọn một đối tượng, giả sử A, và sau đó func(A,x) thông qua tất cả các đối tượng khác. Vì vậy, về cơ bản đạt được một cái gì đó như:

func(A,B) 
func(A,C) 
A.update() 

func(B,A) 
func(B,C) 
B.update() 

... 

Vì vậy, tôi cần phải tạo một mảng của tất cả các đối tượng tôi có thể lặp lại, trong khi loại trừ chính nó tất nhiên. Tôi cố gắng để làm điều đó với mảng di động, vì vậy tôi có:

AllObjs = {A,B,C} 
for i=1:length(AllObjs) 
    if ~isequal(A, AllObjs{i}) 
    func(A, AllObjs{i}) 
    end 
end 
A.update() 

Tuy nhiên, khi A được cập nhật, các A trong AllObjs không nhận được bản cập nhật. Vì vậy, đối với vòng lặp tiếp theo, tôi phải tạo một mảng mới của tất cả các đối tượng. Nó có thể thực hiện được trong ví dụ đơn giản này nhưng không thể quản lý được khi các đối tượng được cập nhật ở nơi khác. Vì vậy, tôi muốn có một loạt các con trỏ cho tất cả các đối tượng. Google tìm kiếm của tôi nói với tôi không có con trỏ trong Matlab, nhưng có cách nào để đạt được những gì tôi muốn làm ở đây không?

Trả lời

4

Tôi nghi ngờ (khó mà không nhìn thấy mã của bạn) lớp A của bạn, B & C không được kế thừa từ tay cầm.

Lấy ví dụ dưới đây:

classdef noHandle 
    properties 
    name = ''; 
    end 
    methods 
    function obj = noHandle (name) 
     obj.name = name; 
    end 
    end 
end 

A = noHandle ('A'); 
B = noHandle ('B'); 
C = noHandle ('C'); 
allObjs = { A B C } 
allObjs{1}.name % check its name is "A" 
% change the name of A 
A.name = 'AAA' 
allObjs{1}.name % see that allObjs{1} is still A. 

Tuy nhiên nếu bạn làm:

classdef fromHandle < handle 
    properties 
    name = ''; 
    end 
    methods 
    function obj = fromHandle (name) 
     obj.name = name; 
    end 
    end 
end 

Sau đó làm:

A = fromHandle ('A'); 
B = fromHandle ('B'); 
C = fromHandle ('C'); 
allObjs = { A B C } 
allObjs{1}.name % check its name is "A" 
% change the name of A 
A.name = 'AAA' 
allObjs{1}.name % see that allObjs{1} is updated to AAA. 
+0

Không lớp học của tôi không có 'handle'. Có tài liệu nào về nó không? – LWZ

+1

Có rất nhiều tài liệu MATLAB và xem https://stackoverflow.com/q/6436539/4196396 – matlabgui

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