如果lowerBound大于upperBound,您的代码将崩溃
为什么要运行(什么都不会输出,但仍然会运行,而且不能输入浮点,所以“ <1”似乎是“ 0”))...
"line-offset": [
"interpolate",
[ "linear" ],
[ "zoom" ],
12, 0,
16, ["*", 2, 1],
]
但这不是...
for i in 1..<1 {}
?
答案 0 :(得分:1)
前者表示“从1开始并加1,如果该值小于1,则将其包括在内”。那是一个没有值的集合,但这是很合理的话。
后者表示“从1开始并递增1,直到该值等于0,再包含它”。那确实是所有正整数的集合,但是实际上,您绝对不是那个意思,而是明确地将其定义为错误。
另一种说法是,前者是所有大于或等于1且小于1的整数。同样,这是一个空集。
后者是一组所有大于或等于1且小于或等于0的值。这也是一个空集,但几乎可以肯定不是您的意思,因此将其定义为错误。
答案 1 :(得分:1)
错误消息告诉您答案:
不能与upperBound
形成范围
那只是重要的 规则。
如何范围的形成与该规则无关。形成范围的运算符是peek()
还是...
都没关系。重要的是,当我们尝试服从运算符并实例化范围时,必须证明上限不小于下限。
好吧,在..<
中,上限不小于下限。所以这是合法范围。
它也是一个“空”范围; 1..<1
没有整数(既不是0,也不是1,也不是2,也不是任何其他整数)。但这仍然是一个范围。
现在,如果您考虑一下,那是一件非常有价值的事情。在您的示例中,它看起来并不有价值,因为您使用的是文字。但是,当下限和上限来自变量时,contains
不会在lo..<hi
和lo
相等的极端情况下崩溃是一件非常好的事情!这种情况产生了很多,并且有充分的理由。
例如,考虑循环通过数组的元素。如果数组为空,则其hi
为indices
(您猜对了)。您希望合法循环通过该数组。没什么发生,但这不是违法的。这就是这条规则所说的。