如何从matlab类构造函数中更新属性

时间:2013-12-11 04:42:41

标签: matlab oop

我是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期间更新,但是看不到这种情况。有什么想法吗?

2 个答案:

答案 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}}