У меня есть перечисление определено где:Matlab: ошибка в ismember?
classdef MyError
enumeration
Error0
Error1
Error2
end
end
Затем я пытаюсь простой вызов IsMember с другой версии Matlab.
R2012a:
>> enums = enumeration('MyError');
>> ismember(MyError.Error0,enums)
ans =
1
R2013b:
>> enums = enumeration('MyError');
>> ismember(MyError.Error0,enums)
Undefined function 'sort' for input arguments of type 'MyError'.
Error in ismember>ismemberClassTypes (line 711)
sort(ab(1));
Error in ismember>ismemberR2012a (line 490)
lia = ismemberClassTypes(a,b);
Error in ismember (line 57)
[varargout{1:max(1,nargout)}] = ismemberR2012a(A,B);
Я смотрю на код, выдавшего ошибку, и я не могу понять, что цель вызова «рода», потому что его вход скалярное значение и выход не сохраняется. Учитывая, что вызов ismember по перечислимой ценности является довольно общей задачей, я удивлен, увидев такие регрессии.
Любые идеи для рабочего процесса?
'sort' просто используется как часть алгоритма, стоящего за' ismember', чтобы ускорить все. Однако сообщение об ошибке также указывает на то, что, как представляется, существует особая процедура - при условии, что существует подфункция, называемая 'ismember2012a'. – sebastian
Поведение 'ismember' изменилось, если вы хотите старое поведение установить устаревшую флаг: http://stackoverflow.com/questions/20397910/matlab-behavior-of-the-unique-function/20398118#20398118 – Daniel
AFAIK Параметр «устаревший» должен выполнять либо с упорядочением выходного аргумента LOCB, либо с помощью комбинации классов (см. встроенную справку). Я ничего не делаю, поэтому, даже если обходное решение работает в моем случае, Mathworks действительно представила ошибку. –