我读了this documentation page关于如何从子类调用超类构造函数的内容。他们提到的语法是:
obj = obj@MySuperClass(SuperClassArguments);
我想知道上面语法中@
符号的用途是什么。 @
符号在语法或中只是一个毫无意义的占位符,@
符号是否代表MATLAB中的function handle symbol?
如果我使用:
obj = MySuperClass(SuperClassArguments);
而不是
obj = obj@MySuperClass(SuperClassArguments);
它仍然可以正常工作。那么使用@
符号的目的是什么?
答案 0 :(得分:6)
1)这与function handles无关,这是用于call the superclass constructor
的语法2)你可以尝试一下,亲眼看看。这是一个例子:
classdef A < handle
properties
a = 1
end
methods
function obj = A()
disp('A ctor')
end
end
end
classdef B < A
properties
b = 2
end
methods
function obj = B()
obj = obj@A(); %# correct way
%#obj = A(); %# wrong way
disp('B ctor')
end
end
end
使用正确的语法,我们得到:
>> b = B()
A ctor
B ctor
b =
B with properties:
b: 2
a: 1
如果使用注释行而不是第一行,则会出现以下错误:
>> clear classes
>> b = B()
A ctor
A ctor
B ctor
When constructing an instance of class 'B', the constructor must preserve the class of the returned
object.
Error in B (line 8)
disp('B ctor')