我喜欢使用开关/案例,但我一直想知道是否可以将默认值与 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
}
你知道这可能吗?我有时会喜欢这种方式,因为即使它只相当于使用默认值,但代码有时对读者来说更加精确(没有歧义或混淆)。
答案 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中编译。