Определение перечислений и констант локально в MATLAB

#matlab #matlab-class

#matlab #matlab-класс

Вопрос:

Я хотел бы определить перечисления и константы локально в пределах области действия функции.

Я видел, что 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 , который может быть 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
  

Приложение 2:

Могу ли я сделать это, используя Java-код? Если да, то как?

Комментарии:

1. Не могли бы вы опубликовать пример того, что вы хотели бы иметь?

Ответ №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
      

Надеюсь, это поможет. Пожалуйста, опубликуйте продолжение, если нет.