【发布时间】: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