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

标签 matlab oop enums switch-statement

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

来 self 的枚举类:

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 语句中使用枚举 部分的语法相同。 ,但也许我遗漏了一些明显的东西?

最佳答案

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

我的计划.m

classdef MyScheme
    enumeration
        Scheme1, Scheme2, Scheme3
    end
end

我的类.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

关于MATLAB 枚举 switch 语句总是进入第一种情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18472504/

相关文章:

c++ - 使用 g++ 编译器编译时如何添加 mclmcrrt.lib 或 (.lib) 文件

c# - 你如何摆脱 C# 中的对象

java - Java中的重构: Duplicated attributes

c# - 我应该将枚举 ID/值存储在数据库中还是 C# 枚举中?

C++ 枚举标志用法

matlab - 没有for循环,我可以在matlab中生成列表[1 2 3 2 3 4 3 4 5 ...]吗?

matlab - 在 Matlab 中将整数和字符串的混合矩阵写入 .csv

Matlab:CVODE 接口(interface),采用普通 Matlab ODE 参数

带有纯 Javascript View 的 PHP MVC : good practice?

c++ - 在 C++ 中使用 set 和 get 枚举