Why does matlab allow array indexing by a string by converting them into ascii codes?
Mostrar comentarios más antiguos
If you (by accident) enter a character array in an array indexing and it returns values not an error. It turns out that MATLAB converts characters to ASCII codes, use them as integer indices, and returns the values. For example:
X = rand(1,100);
X('A') == X(65)
I think this is just confusing, useless, and potentially risky. Does anyone know a good reason why MATLAB even supports this?
Respuesta aceptada
Más respuestas (1)
Why? Because it retains consistency across data types of char() being simply an array of byes.
Indexing by alphabetical index can often be used for character translation functions if nothing else...
MATLAB being loosely typed (and initially far more loosely than presently with all the relatively recent new data types) simply leaves the decision to the programmer to use the array as wanted instead of "getting in the way" if it is the intended purpose. OTOH, if it isn't intended, yes, there is the facility to shoot foot, self.
You don't illustrate the actual code in which you discovered this feature; but one would suggest perhaps the solution would have been to have used a cellstr or string data type instead of character array.
>> X("A")
Function 'subsindex' is not defined for values of class 'string'.
>> X({'A'})
Function 'subsindex' is not defined for values of class 'cell'.
>>
for the latter, of course, if one dereferences a cellstr() array, one ends up with a char() array so that isn't quite as bulletproof...
Categorías
Más información sobre Matrix Indexing en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!