Вызначэнне пералікаў і канстант лакальна ў 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 павінен вызначыць у сваім файла.

Я хацеў бы пазбегнуць неабходнасці ў файл для кожнага пералічэння або набор канстант, якія я выкарыстоўваю. Ці ёсць спосаб зрабіць гэта? Якія ёсць варыянты?

Даданне 1:

Sine мяне папрасілі для прыкладу, вось адзін у <�моцны> псевдокод . Гэты прыклад ілюструе маю патрэбнасць у вызначэнні і выкарыстанні мясцовых пералічэнняў.

Скажам, у мяне ёсць тып пералічэння з імем колеру , які можа быць RED або Сіні . Я хацеў бы, каб вызначыць колеру лакальна ў маёй функцыі, і выкарыстоўваць гэта зрабіць, кантраляваць паток маіх выказванняў у функцыі:

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
Не маглі б вы апублікаваць прыклад таго, што вы хацелі б мець?
дададзена аўтар Jacob, крыніца

1 адказы

Я думаю, што пералічэння будуць залішнімі. Вы можаце зрабіць гэта,

  • defining a matlab struct of RGB values
  • determine which color is "inputted" and remembering that color fieldname
  • do something with that color

    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
    

Спадзяюся, што гэта дапамагае. Калі ласка, пост высочвання, калі няма.

1
дададзена