调用MATLAB类实例的副作用不会持久存在

Dav*_*e_L 4 oop matlab matlab-class

如果我在MATLAB中制作以下玩具类:

classdef testIt
    properties
        a
        b
        c
    end
    methods
        function obj = testIt
            obj.a = 1;
            obj.b = 2;
        end

        function obj = set.a(obj,a)
            obj.a = a;
        end

        function obj = set.b(obj,b)
            obj.b = b;
        end

        function obj = addup(obj)
            obj.c = obj.a + obj.b;
        end
    end
end
Run Code Online (Sandbox Code Playgroud)

然后实例化并调用addup方法:

>> aTest = testIt

Properties:
a: 1
b: 2
c: []

>> aTest.addup

Properties:
a: 1
b: 2
c: 3

>> aTest

Properties:
a: 1
b: 2
c: []
Run Code Online (Sandbox Code Playgroud)

该物业c尚未创建.相反,我需要使用语法:

>> aTest = aTest.addup

>> aTest

Properties:
a: 1
b: 2
c: 3
Run Code Online (Sandbox Code Playgroud)

任何人都可以向我解释为什么这是必要的吗?

Jon*_*nas 8

Matlab支持两种类:句柄类值类.

值类的操作类似于结构和其他Matlab变量,因为它们是按值传递的.因此,如果要在函数中修改值类的实例,则需要返回并覆盖调用工作空间中的实例.

另一方面,处理类通过引用传递.如果在任何位置更改属性的值,则会在所有工作空间中更新类.例如,您可以在基础工作区中引用对象,在GUI中引用一个对象,如果修改一个,则另一个引用相应地更改其值.

如果将代码更改为classdef testIt < handle,则对象将按照您期望的方式运行.

另外:看看文档