在Haxe开关/案例中,有没有办法混合案例'xx':默认情况:?

时间:2014-08-26 21:46:43

标签: haxe

我喜欢使用开关/案例,但我一直想知道是否可以将默认值与 Haxe (版本2或3)中的案例混合使用?

这是我想要实现的一个例子,除了它没有编译:

switch(s) {
    case 'reset': trace("...");
    case 'stat','stats': trace("...");        // This compiles ok in case some people don't know
    case 'help', default: trace("...");       // This doesn't compile
}

你知道这可能吗?我有时会喜欢这种方式,因为即使它只相当于使用默认值,但代码有时对读者来说更加精确(没有歧义或混淆)。

2 个答案:

答案 0 :(得分:4)

我刚刚设法为 Haxe 3 找到了一个有效的解决方案。不幸的是,它并没有在我现在正在使用的版本Haxe 2.10中编译。 (编辑:我找到了Haxe 2的方法,请参阅下面的其他答案)。

此处的文档(http://haxe.org/manual/lf-pattern-matching-introduction.html)表示" a _ pattern匹配任何内容,因此case _:等于默认值:"。

与编写case 'stat', 'stats':类似,我尝试编写case 'help', _:并编译。

所以Haxe 3的缩写是:

switch(s) {
    case 'reset': trace("...");
    case 'stat','stats': trace("...");
    case 'help', _: trace("...");
}

我在这里编译了一个例子:http://try.haxe.org/#A8D15

答案 1 :(得分:0)

这是一种适用于 Haxe 2.xx

的简单方法
switch(s) {
    case 'reset': trace("...");
    case 'stat','stats': trace("...");
    case 'help', s /*!default!*/: trace("...");
}

因此,对于Haxe 2.xx,我们所要做的就是在最终案例中重复交换机内部的表达式,它将匹配任何内容。为了便于阅读,我建议在之后添加评论。

奇怪的是,这种符号不会在Haxe 3中编译。