我喜欢 matlabs App Designer 使用的 OO 编程风格(或者至少我使用它的方式)。现在我想知道是否可以在我的“普通”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()
我想摆脱 classdef 中的所有“obj =”,这在 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 设计器中修改类(实例?)中的变量,同时还能够访问修改后的变量,而无需显式覆盖旧类实例。
我注意到 App Designer 将所有方法的属性设置为(Access = private),但我不确定这与它有什么关系。当然,如果我将所有内容都设置为私有,那么我将无法再从外部访问 Main() 方法。
所以我的问题是,我如何在“普通”matlab 中编程,就像在 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