Мне нравится стиль программирования ОО, который использует Matlabs App Designer (или, по крайней мере, способ, которым я его использую). Теперь мне интересно, смогу ли я использовать тот же стиль в моем "обычном" классе matlab.
Что у меня сейчас есть:
classdef myClass
properties
myVar;
end
methods
function Main(obj)
obj.myVar = "a";
obj = DoSomething(obj);
disp(obj.myVar) % outputs "c"
end
function obj = DoSomething(obj)
if(obj.myVar == "a")
obj.myVar="c";
else
obj.myVar = "b";
end
end
end
end
Который можно вызывать извне, используя:
myClassInst = myClass;
myClassInst.Main()
Я хотел бы избавиться от всех «obj =» в classdef, как это возможно в App Designer. Итак, что-то похожее на это:
classdef myClass
properties
myVar;
end
methods
function Main(obj)
obj.myVar = "a";
DoSomething(obj); % Just call the function without "obj = "
disp(obj.myVar) % outputs "a" because I didn't overwrite obj
end
function DoSomething(obj)
if(obj.myVar == "a")
obj.myVar="c";
else
obj.myVar = "b";
end
end
end
end
Эквивалент этого, похоже, работает в App Designer. Похоже, что вы можете изменять переменные в классе (экземпляре?) В App Designer, а также иметь возможность доступа к измененной переменной без явной перезаписи вашего старого экземпляра класса.
Я заметил, что в App Designer есть все методы и свойства установите (Access = private), хотя я не уверен, что это как-то связано с этим. Конечно, если я установлю все как private, то я больше не смогу получить доступ к методу Main () извне.
Поэтому мой вопрос, как я могу программировать в "нормальном" matlab, так же, как возможно в App Designer?
РЕДАКТИРОВАТЬ: Следующие работы в App Designer (я пропустил методы / свойства для GUI элементов):
classdef tmp < matlab.apps.AppBase
properties (Access = private)
myVar; % Description
end
methods (Access = private)
function doSomething(app)
if app.myVar == "a"
app.myVar = "c";
else
app.myVar = "b";
end
end
end
% Callbacks that handle component events
methods (Access = private)
% Code that executes after component creation
function startupFcn(app)
app.myVar = "a";
doSomething(app);
disp(app.myVar); % outputs "c"
end
end
end