способ скопировать класс, который является классом дескриптора? - PullRequest
2 голосов
/ 18 ноября 2011

У меня есть класс с дескриптором, и я хочу скопировать его по значению и сохранить где-нибудь.Однако, если я что-то изменю в классе, это также изменит его копию.

Вот пример моего класса, который я хочу скопировать:

classdef MyClass < handle
    properties
        data;
    end
    methods
        function M = MyClass()
           M.data=5; 
        end
    end      
end

Вот тестовый классчтобы проверить изменения:

classdef Test < handle  
    properties 
        store 
    end 
    methods 
         function N = Test(M) 
             N.store = M; 
         end 
    end 
end 

Теперь мы создаем экземпляр MyClass и сохраняем его в Test:

>> m=MyClass
m =
  MyClass handle
  Properties:
    data: 5
  Methods, Events, Superclasses

>> a=Test(m)
a = 
  Test handle
  Properties:
    store: [1x1 MyClass]
  Methods, Events, Superclasses

>> a.store
ans =
  MyClass handle
  Properties:
    data: 5
  Methods, Events, Superclasses

Наконец, если я изменю значение 'data' в 'm«Я не хочу, чтобы он изменял значение в хранилище, однако, похоже, что MyClass хранится в« хранилище »по ссылке:

>> m.data=3;
>> a.store
ans = 
  MyClass handle
  Properties:
    data: 3
  Methods, Events, Superclasses

>> a.store.data
ans =
     3

Возможно ли скопировать класс« handle »?Или мне нужно изменить свой класс, чтобы сделать его по значению, чтобы это работало?

1 Ответ

4 голосов
/ 18 ноября 2011

Вы можете сделать его копируемым, взяв из matlab.mixin.CopyableClass , подробности см. По ссылке.

...