在MATLAB中本地定义枚举和常量

时间:2011-10-28 15:10:06

标签: matlab matlab-class

我想在函数范围内本地定义枚举和常量。

我看到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文件。有没有办法做到这一点?我有什么选择?

附录1:

正弦我被问到一个例子,这是伪代码中的一个。这个例子描述了我需要定义和使用本地枚举。

假设我有一个名为colors的枚举类型,可以是REDBLUE。我想在我的函数中本地定义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

附录2:

我可以通过利用Java代码来做到这一点吗?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:1)

我认为枚举会有点矫枉过正。你可以通过

来做到这一点
  • 定义RGB值的matlab结构
  • 确定“输入”哪种颜色并记住该颜色字段名
  • 用这种颜色做点什么

    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
    

希望这会有所帮助。如果没有,请发布跟进。