MATLAB枚举的switch语句总是进入第一种情况

时间:2013-08-27 18:02:00

标签: matlab oop enums switch-statement

我正在尝试使用枚举类来指示另一个类的构造函数中的switch语句中的行为。所以,我所拥有的是以下内容:

来自我的枚举类:

classdef(Enumeration) MyScheme
    enumeration
        Scheme1, Scheme2, Scheme3
    end
end

然后使用它的类:

classdef MyClass < handle
    methods
        function c = MyClass(scheme, varargin)
            switch(scheme)
                case MyScheme.Scheme1
                    % Do stuff with varargin
                case MyScheme.Scheme2
                    % Do different stuff with varargin
                case MyScheme.Scheme3
                    % Do yet something else with varargin
                otherwise
                    err('Not a valid scheme');
            end
        end
    end
end

然而,无论我传递给构造函数的是什么方案,它都直接进入第一种情况。当我添加断点并逐步执行并手动检查相等性(scheme == MyScheme.Scheme1)时,它会识别出两者不相等并为此检查返回0,所以我完全不明白为什么它仍会进入第一种情况。如果我更改了案例的顺序,它将只输入第一个案例。据我所知,这与this MATLAB help document使用Switch语句中的枚举部分的语法相同,但也许我遗漏了一些明显的东西?

1 个答案:

答案 0 :(得分:1)

我无法在R2013a中重现该问题:

MyScheme.m

classdef MyScheme
    enumeration
        Scheme1, Scheme2, Scheme3
    end
end

MyClass.m

classdef MyClass < handle
    properties
        x
    end
    methods
        function obj = MyClass(scheme)
            switch(scheme)
                case MyScheme.Scheme1
                    obj.x = 10;
                case MyScheme.Scheme2
                    obj.x = 20;
                case MyScheme.Scheme3
                    obj.x = 30;
                otherwise
                    error('Not a valid scheme');
            end
        end
    end
end

正常工作:

>> MyClass(MyScheme.Scheme2)
ans = 
  MyClass with properties:

    x: 20

如果由于某种原因它仍然不适合您,则解决方法是比较它们的字符串表示形式:

switch char(scheme)
    case char(MyScheme.Scheme1)
        obj.x = 10;
    case char(MyScheme.Scheme2)
        obj.x = 20;
    case char(MyScheme.Scheme3)
        obj.x = 30;
    otherwise
        error('Not a valid scheme');
end