我是matlab中面向对象编程的新手,在修改我的类构造函数中的某些属性时遇到了一些麻烦。我的班级看起来像
classdef kENot
properties
Sys;
end
methods
function obj=kENot(Sys)
%Constructor
obj.Sys=Sys;
obj.eyePrime
end
function obj=eyePrime(obj)
obj.Sys.IPrime=5
end
end
end
然后从命令行我将该构造函数称为
Sys.Iprime=4;
classObj=kENot(Sys);
disp(classObj.Sys.Iprime)
并且matlab打印4.我想要的是classObj.Sys.Iprime的值在构造函数中调用obj.eyePrime期间更新,但是看不到这种情况。有什么想法吗?
答案 0 :(得分:2)
为了完整性,创建句柄类不是解决此问题的唯一方法。
只要kENot
不是句柄类,您就必须始终将更改对象的方法的输出分配给保存实例的变量。
在您当前的实现中,eyePrime
会返回修改后的obj
。但是你没有使用返回的值。
因此,您可以将构造函数更改为:
function obj=kENot(Sys)
%Constructor
obj.Sys=Sys;
obj = obj.eyePrime();
end
当然,与所有其他面向对象的编程语言相比,这是非常笨拙的语法,这可能是为什么处理类在这里受到青睐。
像往常一样,mathworks上有很好的文档:
http://www.mathworks.de/de/help/matlab/matlab_oop/comparing-handle-and-value-classes.html
答案 1 :(得分:1)
首先,我认为您应该obj.Sys.IPrime=5
而不是obj.Sys.Iprime=5
,而不是handle
。小'p'。其次,我认为你需要进行classdef kENot < handle
properties
Sys;
end
methods
function obj=kENot(Sys)
%Constructor
obj.Sys=Sys;
obj.eyePrime();
end
function obj = eyePrime(obj)
obj.Sys.Iprime=5;
end
end
end
课程。
{{1}}