为什么将传递给方法的值保存为对象?

Why are the values passed to a method saved as an object?

我有一个 class,它有一个调度程序函数,应该将字符插入到元胞数组中:

classdef timeline < handle
properties
    schedule
    i
    %other properties
end

methods
    %other functions
    function t = timeline()
         %other initializations
         t.schedule = cell(1,738);
         t.i = 1;
    end
    function scheduler(t, g, fT)
        if nargin == 2
            fT = t.i;
        end
        if strcmp(g,'science')
            'science' % eclipse occurs after
            for j = (fT+t.sTime+1) : (fT+t.sTime+1+t.eTime)
                t.schedule{j} = 'e';
            end
        elseif strcmp(g,'pass')
            'pass' % science occurs 2 hrs after end
            for j = (fT) : (fT+t.pTime)
                t.schedule{j} = 'p'
            end
            for j = (fT+t.pTime+121) : (fT+t.pTime+120+t.sTime)
                t.schedule{j} = 's';
            end
            scheduler(t, 'science', fT+t.pTime+120);
        end
    end
end
end

在命令 window 中,我定义了对象 t = timeline() 和模式 g = 'pass',然后调用调度程序 t.scheduler(t,g).

它不会改变 schedule 属性。 if 语句中发生了什么来编写时间表不是我关心的问题。我将输出放在 if 语句的每个部分,发现 strcmp 返回 false 并跳过整个块。因此,我在调度程序函数中添加了一个断点,发现由于某种原因 g 被作为另一个 timeline 对象而不是字符串 'pass' 传递给函数。这是为什么?

当您调用对象的方法时,您可以使用点表示法或函数表示法。点表示法意味着您在对象实例上使用点运算符调用方法。例如,

obj.methodName(args);

在函数表示法中,您将对象实例变量作为第一个参数传递给方法。例如,

methodName(obj, args);

以上两种调用是等价的,都调用了对象中相同的方法。在这两个调用中,MATLAB 将 obj 作为输入传递给方法。请注意,点符号中没有 obj 作为参数。在点符号 obj 中,作为输入参数添加到您的参数之前。在您的代码中,您混合了这两个选项。所以你的方法有两个 obj 参数。

相关文档位于 http://www.mathworks.com/help/matlab/matlab_oop/method-invocation.html