Using structures as enum input to a function in MATLAB
15 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Hello
I'm implementing a function that gets as one input with two possible values Red (enum configured as 1) , Green(enum configured as 2).
so what I did in matlab is this:
colors = struct('Red', 1, 'Green', 2);
function output=choose(colors)
{
if (colors == Red) %in other words if I input 'Red' to function choose
do something
else (colors == Green )%in other words if input is 'Green' to function choose
do something
}
So I want to write this, choose (Red) or choose(Green) and get the required output of a function. this means I want to write in my editor after building the function just this : choose(Red) or choose (Green) then I get output.
How I can implement that in matlab? as I showed above it tells me once I write choose(Red) that Red isn't defined although I already defined it as structure above the function... any help?!
0 Kommentare
Antworten (1)
Jan
am 22 Dez. 2020
You have defined a struct, but this is not an enum. With your code (if you omit the curly braces), you could use:
choose(colors.Red)
becaus your have created a struct. Matlab cannot guess, that you want to treat the field names for another purpose.
You need to defined an enumeration class for an enumeration: doc enumeration
Even then you need to sepcify the enumeration class in addition and choose(Red) is not possible:
classdef colors
enumeration
Red, Green
end
end
choose(colors.Red)
7 Kommentare
Jan
am 23 Dez. 2020
@Jimmy cho: I strongly recommend not to do that and I do not believe that this is a clean programming style, but it works easily:
Insert in each function, which uses the variables, these lines:
Red = 1;
Green = 2;
Alternatively create a script, which contains these lines und call it from each function before the variables are used. Then you have to change only one code, if you add a new color. Remember, that this can slow down the processing massively, because the JIT-accelerator might not know the type of the concerned variables. Therefore I'd never use a script for anything.
The clean way is to define an enumeration class and "color.red" instead of "Red". I cannot imagine, why this clean and efficient method does not satisfy your needs and why choose(Red) is so much better then e.g. choose('red') .
per isakson
am 24 Dez. 2020
Why not
classdef colors < uint8
enumeration
Red (1)
Green (2)
end
end
Siehe auch
Kategorien
Mehr zu Enumerations finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!