Как работают свойства в объектно-ориентированном MATLAB?



matlab figure title (2)

Использование ванильного класса

При использовании ванильного класса вам нужно сообщить Matlab, чтобы сохранить измененную копию объекта, чтобы сохранить изменения в значении свойства. Так,

>> a=testprop
>> a.Request(5); % will NOT change the value of a.numRequests.
5

>> a.Request(5) 
5

>> a.numRequests
ans = 
       0

>> a=a.Request; % However, this will work but as you it makes a copy of variable, a.
5

>> a=a.Request; 
5

>> a.numRequests
ans =
       2

Использование класса Handle

Если вы наследуете класс handle, то есть

classdef testprop < handle

то вы можете написать,

>> a.Request(5);
>> a.Request(5);
>> a.numRequests
ans = 
       2

Обновление: использование ванильного класса

Поскольку Kamran отмечает, что вышеописанное работает, определение метода Request в примере кода кода вопроса необходимо изменить, чтобы включить выходной аргумент типа testprop .

Спасибо Kamran.

https://ffff65535.com

Я пытаюсь создать класс MATLAB с переменной-членом, которая обновляется в результате вызова метода, но когда я пытаюсь изменить свойство внутри класса, он (по-видимому, из того, что я понял из управления памятью MATLAB) создает копию объекта, а затем изменяет его, оставляя свойство исходного объекта нетронутым.

classdef testprop  
    properties  
        numRequests=0;  
    end  
    methods  
        function Request(this, val)  
            disp(val);  
            this.numRequests=this.numRequests+1;  
        end  
    end  
end  

,

>> a=testprop;
>> a.Request(9);
>> a.Request(5);  
>> a.numRequests  

ans = 0  

Вы должны помнить, что синтаксически в Matlab, вы, вероятно, ближе к C, чем C ++ или Java, по крайней мере, в отношении объектов. Итак, вы хотите изменить «содержимое» объекта значения (на самом деле просто специальную struct ), вам нужно вернуть объект из функции.

Азим был прав, указав, что если вы хотите поведение Singleton (которое, как вам кажется, из вашего кода), вам нужно использовать класс «handle». Экземпляры классов, которые выводятся из Handle, указывают на один экземпляр и работают только на нем.

Вы можете больше узнать о различиях между классами Value и Handle.





matlab-class