我想在函数范围内本地定义枚举和常量。
我看到MATLAB提供了枚举和常量作为其面向对象编程框架的一部分。但是,如果您尝试在函数范围内定义它们,则它们不起作用。例如。如果您尝试以下操作,MATLAB会抱怨“解析错误:语法无效”:
function output = my_function(input)
classdef my_constants
properties (Constant)
x = 0.2;
y = 0.4;
z = 0.5;
end
end
classdef colors
enumeration
blue, red
end
end
statements;
原因似乎是每个classdef
都需要在自己的.m
文件中定义。
我想避免为我使用的每个枚举或一组常量使用.m
文件。有没有办法做到这一点?我有什么选择?
正弦我被问到一个例子,这是伪代码中的一个。这个例子描述了我需要定义和使用本地枚举。
假设我有一个名为colors
的枚举类型,可以是RED
或BLUE
。我想在我的函数中本地定义colors
,并使用它来控制函数中语句的流程:
function output = my_function(input)
# ....
# Code that defines the enumeration 'colors'
#....
my_color = colors;
# ... code that changes 'my_color' ...
switch my_color
case RED
do this
case BLUE
do that;
end
我可以通过利用Java代码来做到这一点吗?如果是这样,怎么样?
答案 0 :(得分:1)
我认为枚举会有点矫枉过正。你可以通过
来做到这一点用这种颜色做点什么
function output = my_function(input)
% Code that defines the enumeration 'colors' in terms of RGB
colors.RED = [1 0 0];
colors.BLUE = [0 0 1]
... etc ...
% ... here... what determine my_color is,
% which is logic specific to your function
%
% You should assign 'my_color' to the same struct
% fieldname used in the above 'colors'
if( some red conditon )
my_color = 'RED';
elseif( some blue condition)
my_color = 'BLUE';
elseif(etc...)
end
% at this point, my_color will be a fieldname
% of the 'colors' struct.
%
% You are able to dynamically extract the
% RGB value from the 'colors' struct using
% what is called called dynamic field reference.
%
% This means...
%
% While you can hardcode blue like this:
%
% colorsStruct.BLUE
%
% You are also able to dynamically get BLUE like this:
%
% colorName = 'BLUE';
% rgbValue = colorsStruct.(colorName);
%
%
% Loren has a good blog on this:
%
% http://blogs.mathworks.com/loren/2005/12/13/use-dynamic-field-references/
% Extract the rgb value
my_color_rgb_value = colors.(my_color);
% Do something with the RGB value
your_specific_function(my_color_rgb_value);
end
希望这会有所帮助。如果没有,请发布跟进。