【问题标题】:In Haxe switch/case, is there a way to mix a case 'xx': with the default:?在 Haxe 开关/案例中,有没有办法将案例 'xx': 与默认值混合:?
【发布时间】:2014-08-26 21:46:42
【问题描述】:

我很喜欢使用 switch/case,但我一直想知道是否可以在 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
}

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

【问题讨论】:

  • 把公共代码放在一个函数中,然后从case 'help'default:调用函数。
  • 根据haxe.org/manual/lf-pattern-matching-or.html,在Haxe 3中也可以写case 'stat' | 'stats':而不是case 'stat', 'stats'

标签: haxe


【解决方案1】:

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

这里的文档 (http://haxe.org/manual/lf-pattern-matching-introduction.html) 说“a _ 模式匹配任何东西,所以 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

【讨论】:

  • 也可以在 Haxe 3 中写 case 'help' | _: trace("...");
  • 大项目始于 2011 年,目前没有真正的理由将所有内容移植到 Haxe 3,因为它运行良好。我认为很多人仍在使用 Haxe 2.10。尽管在 Haxe 3 中一些新的符号和更简单的宏看起来令人兴奋,但我认为目前还没有迫切的理由来切换。移植、在服务器上编译、测试等可能需要一周左右的时间。
  • 我猜他们在 Haxe 3 中添加此功能的原因是因为在 Haxe 2 中没有简单的方法可以做到这一点。所以你的问题可能没有得到解决。
  • 不,实际上我找到了 Haxe 2 的方法,请参阅下面的答案。
【解决方案2】:

这是一种适用于 Haxe 2.xx 的简单方法:

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

所以对于 Haxe 2.xx,我们所要做的就是在最后一个 case 中重复 switch 内的表达式,它会匹配任何东西。为了便于阅读,我建议在后面添加评论。

奇怪的是,这种表示法在 Haxe 3 中无法编译。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 2016-10-09
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    • 2013-05-27
    • 1970-01-01
    相关资源
    最近更新 更多