Вызов конструктора суперкласса
Я прочитал эту страницу документации о том, как вызвать конструктор суперкласса из дочернего класса. Синтаксис, который они упоминают, таков:
obj = obj@MySuperClass(SuperClassArguments);
Мне интересно, какова цель @
Символ в приведенном выше синтаксисе Это @
символ просто бессмысленно занимает место в синтаксисе или делает @
символ представляет символ дескриптора функции в MATLAB?
Если я использую:
obj = MySuperClass(SuperClassArguments);
вместо
obj = obj@MySuperClass(SuperClassArguments);
это все еще работает отлично. Так какова цель использования @
условное обозначение?
1 ответ
Решение
1) нет, это не имеет ничего общего с дескрипторами функций, это синтаксис, используемый для вызова конструктора суперкласса
2) вы можете попробовать и убедиться сами. Вот пример:
Am
classdef A < handle
properties
a = 1
end
methods
function obj = A()
disp('A ctor')
end
end
end
Bm
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')