2013-12-10 55 views
0

我有一個枚舉某處定義:Matlab:在ismember中的錯誤?

classdef MyError 

    enumeration 

    Error0 
    Error1 
    Error2 

    end 

end 

然後,我想一個簡單的調用不同版本的Matlab在ismember。

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是相當普遍的任務,我很驚訝地看到這樣的迴歸。

任何解決辦法的想法?

+0

'sort'被簡單地用作'ismember'背後的算法的一部分來加速事情。但是錯誤消息也表明,似乎有一些特殊的處理 - 考慮到有一個子功能稱爲「ismember2012a」。 – sebastian

+0

「ismember」的行爲發生了變化,如果您希望舊行爲設置遺留標誌,請執行以下操作:http://stackoverflow.com/questions/20397910/matlab-behavior-of-the-unique-function/20398118#20398118 – Daniel

+0

AFAIK 'legacy'選項必須與LOCB輸出參數或類組合的排序(請參閱內聯幫助)。我沒有這樣做,所以即使解決方法適用於我的情況,Mathworks也引入了一個錯誤。 –

回答

0

我不能在本地測試,但你可能要檢查,如果事情稍微修改類定義的工作:

classdef MyError < uint32 

    enumeration 

    Error0 (0) 
    Error1 (1) 
    Error2 (2) 

    end 

end 

子類的任何數值類型應該讓你的sort - 方法。 這仍然不是一個真正的修復或解釋,但可能是最好的解決方法。

+0

是的,我考慮過這個問題,但是我使用的真正的類實現具有屬性,並且當內置類用作父類時,Matlab不允許屬性。 –

0

不幸的是它似乎是一個功能,而不是一個錯誤。

在MATLAB的「舊」版本,幫助文件指出:

In a future release, the behavior of ismember will change including: 
    - occurrence of indices in LOCB will switch from highest to lowest 
    - tighter restrictions on combinations of classes 

In order to see what impact those changes will have on your code, use: 

    [LIA,LOCB] = ismember(A,B,'R2012a') 
    [LIA,LOCB] = ismember(A,B,'rows','R2012a') 

If the changes in behavior adversely affect your code, you may preserve 
the current behavior with: 

    [LIA,LOCB] = ismember(A,B,'legacy') 
    [LIA,LOCB] = ismember(A,B,'rows','legacy') 

如果我與R2012a標誌嘗試它使我確實得到你提到的錯誤。因此,我認爲給出的建議會爲你工作。包括legacy國旗,並可能會做到這一點。

+0

但是,正如OP所評論的那樣,文件行爲的改變與觀察到的錯誤沒有任何關係。當然這個錯誤大概是在介紹新行爲的時候出現的。 – sebastian

+0

「傳統」技巧適用於我,但這並不意味着Mathworks不會引入錯誤......舊幫助文件中沒有任何內容特別提及我目睹的錯誤。我將向Mathworks提交一張票,並看看他們對此有何評論。 –