在matlab中实现抽象方法
implementing abstract methods in matlab
我是 MATLAB OOP 新手。我有一个抽象 class 在我的 matlab 路径中定义了一个抽象方法。我在名为@SubAbsClass 的子文件夹中有一个名为 SubAbsClass 的 subclass。在 subclass 中实现抽象方法后,我无法创建 subclass 的对象。这是我的 SubAbsClass 实现:
classdef SubAbsClass < AbsClass
properties
O1
end
methods
function obj=SubAbsClass(a,b)
obj.O1=absMethod(a,b);
end
end
methods (Static)
function out = absMethod(a,b)
out = a + b;
end
end
end
我的抽象 class 实现是:
classdef AbsClass
methods(Abstract, Static)
result = absMethod
end
end
当我尝试在 MATLAB 路径中创建一个对象时(抽象 class 在 MATLAB 路径中),我得到一个错误。我尝试了很多配置并搜索了 matlab oop 文档,以及包括 Whosebug 在内的网络,但不幸的是找不到要实施的示例。感谢您的帮助
>> clear all; clear classes;
>> obj=SubAbsClass(5,2)
Undefined function 'absMethod' for input arguments of type 'double'.
Error in SubAbsClass (line 11)
obj.O1=absMethod(a,b);
在一个方法中,Matlab 认为非点引用是对局部函数的调用(在 class 文件中的 classdef
块之外定义)或对以下 Matlab 路径上某处的函数的调用通常的查找规则。
所以需要在构造函数中通过实例obj
调用Static
方法:
methods
function obj = SubAbsClass(a,b)
obj.O1 = obj.absMethod(a,b);
end
end
上面的一个小警告是非Static
方法也有函数形式。
所以如果方法不是Static
,这个符号也可以工作
methods
function obj = SubAbsClass(a,b)
obj.O1 = absMethod(obj,a,b);
end
end
我认为这几乎等同于点符号,尽管有人说它是 "generally" faster(尽管那是四年前的事了)。
这里是 ordinary method invocation and Static
method 调用的详细信息。
我是 MATLAB OOP 新手。我有一个抽象 class 在我的 matlab 路径中定义了一个抽象方法。我在名为@SubAbsClass 的子文件夹中有一个名为 SubAbsClass 的 subclass。在 subclass 中实现抽象方法后,我无法创建 subclass 的对象。这是我的 SubAbsClass 实现:
classdef SubAbsClass < AbsClass
properties
O1
end
methods
function obj=SubAbsClass(a,b)
obj.O1=absMethod(a,b);
end
end
methods (Static)
function out = absMethod(a,b)
out = a + b;
end
end
end
我的抽象 class 实现是:
classdef AbsClass
methods(Abstract, Static)
result = absMethod
end
end
当我尝试在 MATLAB 路径中创建一个对象时(抽象 class 在 MATLAB 路径中),我得到一个错误。我尝试了很多配置并搜索了 matlab oop 文档,以及包括 Whosebug 在内的网络,但不幸的是找不到要实施的示例。感谢您的帮助
>> clear all; clear classes;
>> obj=SubAbsClass(5,2)
Undefined function 'absMethod' for input arguments of type 'double'.
Error in SubAbsClass (line 11)
obj.O1=absMethod(a,b);
在一个方法中,Matlab 认为非点引用是对局部函数的调用(在 class 文件中的 classdef
块之外定义)或对以下 Matlab 路径上某处的函数的调用通常的查找规则。
所以需要在构造函数中通过实例obj
调用Static
方法:
methods
function obj = SubAbsClass(a,b)
obj.O1 = obj.absMethod(a,b);
end
end
上面的一个小警告是非Static
方法也有函数形式。
所以如果方法不是Static
,这个符号也可以工作
methods
function obj = SubAbsClass(a,b)
obj.O1 = absMethod(obj,a,b);
end
end
我认为这几乎等同于点符号,尽管有人说它是 "generally" faster(尽管那是四年前的事了)。
这里是 ordinary method invocation and Static
method 调用的详细信息。