我正在尝试使用枚举类来指示另一个类的构造函数中 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/