Matlab调用超类抽象构造函数语法看起来很奇怪
Posted
技术标签:
【中文标题】Matlab调用超类抽象构造函数语法看起来很奇怪【英文标题】:Matlab calling superclass abstract constructor syntax seems strange 【发布时间】:2015-02-11 20:48:32 【问题描述】:我正在尝试从继承类调用超类构造函数。 matlab documentation 中的官方语法是:
obj = obj@SuperClass(ArgumentList);
但是编辑器似乎警告说:
变量 `obj` 可以在定义之前使用。
此外,如果我尝试运行代码,我会收到错误消息““@”的左操作数必须是方法名称。”
可能出了什么问题?
【问题讨论】:
天哪,这很烦人......我的错误是子类的构造函数名称有错字。编辑器和解释器都发现这是问题所在。 糟糕!这样就可以了。 【参考方案1】:我发现这是子类构造函数名称拼写错误的结果。问题的最小重构如下:
classdef SuperDemo < handle
methods
function obj = SuperDemo(opt)
disp(['in super ', opt])
end
end
end
classdef SubDemo < SuperDemo
methods
function obj = SubDemoo(opt) % NOTICE THE TYPO SubDemoo
disp(['in sub ', opt])
obj = obj@SuperDemo(opt);
end
end
end
如果你调用s = SubDemo('hello')
你会得到错误:
错误使用 SubDemo 错误:文件:SubDemo.m 行:5 列:19 "@" 在一个方法中,一个同名的超类方法被调用 说方法@超类。 “@”的左操作数必须是方法 名字。
此错误具有误导性,因为左操作数是 obj
而不是 SubDemo
。
错误信息应该已经表明构造函数名SubDemoo
与类名SubDemo
不一样。
【讨论】:
以上是关于Matlab调用超类抽象构造函数语法看起来很奇怪的主要内容,如果未能解决你的问题,请参考以下文章