为什么将传递给方法的值保存为对象?
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
我有一个 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