Octave是否支持像Matlab一样的枚举? 我还没有找到任何关于它的信息。
我们可以通过向类定义添加枚举块来创建枚举类。例如,WeekDays类枚举一周中的一组天(来自Matlab doc)。
%file WeekDays.m
classdef WeekDays
enumeration
Monday, Tuesday, Wednesday, Thursday, Friday
end
end
它在Matlab中运行良好,我将枚举值视为
x = WeekDays.Tuesday;
但 Octave 不编译此行,尽管文件WeekDays.m由Octave编译而没有错误。
答案 0 :(得分:0)
我相信在Octave 4.0版中,对基于classdef
的面向对象代码有实验支持,包括enumeration
块。
编辑:看起来我错了,并且尚未支持枚举,如@carandraug下面的评论中所示(我相信他是Octave开发人员,所以可能比我更了解)
答案 1 :(得分:0)
上面的代码示例仍然无法编译,在Mac上的Octave 5.1.0中。它给出了错误:
octave:1>枚举 警告:“枚举”功能尚未在Octave中实现
在此跟踪枚举进度: https://savannah.gnu.org/bugs/?44582
答案 2 :(得分:0)
您可以将静态函数用作部分解决方法:
classdef WeekDays
methods (Static = true)
function [out] = Monday()
out = "Monday";
end
function [out] = Tuesday()
out = "Tuesday";
end
function [out] = Wednesday()
out = "Wednesday";
end
function [out] = Thursday()
out = "Thursday";
end
function [out] = Friday()
out = "Friday";
end
end
end
同样,您也可以创建枚举对象;我已将模板上传到Google驱动器:https://drive.google.com/open?id=1-HftS5pdzE-oTmaC0kbnYcAcyAsaEcX6
答案 3 :(得分:0)
出于完整性考虑,下面是一个八度式OOP“枚举器”示例:
% @Weekdays/Weekdays.m
function Obj = Weekdays( Weekday )
Obj.enumeration = {'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'};
if nargin == 0; error( "Weekday cannot be initialized empty; choose from 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', or 'Sunday'."); end
if ~ismember( Weekday, Obj.enumeration ); error( sprintf( "%s is not a valid Weekday. Choose from 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', or 'Sunday'.", Weekday ) ); end
Obj.value = Weekday;
Obj = class( Obj, 'Weekdays' );
end
% @Weekdays/display.m
function display(Obj); display( get( Obj ) ); end
% @Weekdays/get.m
function Out = get( Obj ); Out = struct(Obj).value; end
% @Weekdays/set.m
function Obj = set( Obj );
error( "Enum objects have no public properties that can be set");
end
PS。如果您真的必须必须具有点语法访问权限,我想您也可以相应地重载subsref。