【问题标题】:Limit to number of terms in an expression?限制表达式中的项数?
【发布时间】:2014-10-14 06:03:38
【问题描述】:

编辑:这被苹果确认为编译器错误。

下面的第一个if 表达式(17 项)编译,并产生预期的结果(false)。 第二个if 表达式(18 项)失败并显示错误消息:

无法调用“||”带有类型为“($T106,$T110)”的参数列表。

这两个表达式除了额外的术语之外是相同的。

我没有问题解决这个问题,但我只是不明白它在抱怨什么。有人能告诉我我犯了什么愚蠢的错误吗?在这里要温柔,非常缺乏经验的编码人员。

import Darwin

var a = -1
if
    a == 0 ||
        a == 1 ||
        a == 2 ||
        a == 3 ||
        a == 4 ||
        a == 5 ||
        a == 6 ||
        a == 7 ||
        a == 8 ||
        a == 9 ||
        a == 10 ||
        a == 11 ||
        a == 12 ||
        a == 13 ||
        a == 14 ||
        a == 15 ||
        a == 16 ||
        a == 17 { println("value was true") } else { println("value was false")}

if
    a == 0 ||
        a == 1 ||
        a == 2 ||
        a == 3 ||
        a == 4 ||
        a == 5 ||
        a == 6 ||
        a == 7 ||
        a == 8 ||
        a == 9 ||
        a == 10 ||
        a == 11 ||
        a == 12 ||
        a == 13 ||
        a == 14 ||
        a == 15 ||
        a == 16 ||
        a == 17 ||
        a == 18 { println("value was true") } else { println("value was false")}

【问题讨论】:

  • 我在您的代码中看不到明显的错误,我已经可以用 12 个术语重现该问题。您应该向 Apple 提交错误报告。
  • 苹果错误报告 18078691
  • Apple 确认的错误,作为副本关闭。
  • 欢迎报告错误。与此同时,任何导致 17 个子句的逻辑 OR 的东西都可能不是表达你想要做的任何事情的最简洁的方式。您是否查看过 switch 语句或直接使用 ClosedInterval 类型?
  • 有趣的是,从 beta 6 开始,虽然这不能编译,但 swiftc 确实提供了更好的警告:expression was too complex to be solved in reasonable time; consider breaking up the expression into distinct sub-expressions

标签: compiler-errors swift


【解决方案1】:

当错误解决后,你可以使用这个:

switch a {
case 0...17:
    println("value was true")
default:
    println("value was false")
}

【讨论】:

    猜你喜欢
    • 2019-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-11
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    • 1970-01-01
    相关资源
    最近更新 更多