#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
Надеюсь, это поможет. Пожалуйста, опубликуйте продолжение, если нет.