【发布时间】:2020-05-04 07:29:40
【问题描述】:
我正在使用一些代码,这些代码使用来自 enumeration 类(扩展 uint8)的值来“按名称”而不是通过硬编码数字访问矩阵列。采用这种方法的原因是,与其他允许命名字段访问的构造(例如结构/对象或表)相比,矩阵被认为具有更高的性能 - 据称这可以在不牺牲性能的情况下提高代码可读性。
问题是枚举类是在一个包中找到的,给它一个相当长的名字。这极大地损害了可读性,以至于几乎违背了“命名索引”的目的:
% What it looks like without using an enum:
val = foo(:, 7); % Magic number, :(
% Current situation (the enum is called "somePackage.SomeMeaningfulCollectionEnum"):
val = foo(:, somePackage.SomeMeaningfulCollectionEnum.varName1); % Very long name, :(
% Desired solution:
E = somePackage.SomeMeaningfulCollectionEnum; % This throws an error in R2020a
val = foo(:, E.varName1); % Short and descriptive!
当尝试使用上面的“期望的解决方案”时,我们得到以下错误:
Error using somePackage.SomeMeaningfulCollectionEnum
Cannot call the constructor of 'somePackage.SomeMeaningfulCollectionEnum' outside of its enumeration block.
我想出了一个解决方法,包括将每个枚举成员存储在具有相同名称的struct 字段中(请参阅my own answer below),但我想知道是否有“正确”的方法来做到这一点。
【问题讨论】:
标签: matlab enums readability type-alias magic-numbers