首先,有很多短文件是 MATLAB 中的正常情况。解决这个问题是可能的,但通常是徒劳的。
传统上,在 MATLAB 中,常量值被定义为一个函数。例如,pi
是一个函数。它看起来像这样:
function v = pi
v = 3.14159
通过将常量变成一个函数,它可以在任何地方使用,而无需首先运行代码来定义这些常量。
枚举只不过是一系列常量。同样可以用结构来完成:
exampleEnumType = struct('zero',0, 'one',1, 'two',2);
从最近 (R2019b) 开始,MATLAB 允许对函数调用的输出进行点索引,但您确实需要在函数调用中使用空括号。因此,我们可以像使用常量一样声明上述结构:
function v = exampleEnumType
v = struct('zero',0, 'one',1, 'two',2);
这允许exampleEnumType().zero
(几乎)像使用枚举或结构变量一样。
那么我们如何将其扩展到在单个文件中定义多个这些?如果公共前缀没有问题,我们可以定义一个带有静态成员函数的类,每个函数声明一个常量:
classdef constants
methods(Static)
function v = pi
v = 3.14159
end
function v = exampleEnumType
v = struct('zero',0, 'one',1, 'two',2);
end
end
end
我们现在有constants.pi
和constants.exampleEnumType().zero
。
或者,创建一个返回更复杂结构的函数,如下所示:
function v = constants
v.pi = 3.14159;
v.exampleEnumType = struct('zero',0, 'one',1, 'two',2);
这让我们可以做到constants().exampleEnumType.zero
。
请注意,上述方法不适用于 R2019b 之前的 MATLAB 版本。对于旧版本的 MATLAB,最后一种方法(函数constants
)是最好的方法。用户只需要constants = constants;
在需要使用常量的任何函数的顶部执行操作。这会使用同名变量隐藏函数,因此constants.exampleEnumType.zero
可以按预期工作。