我已经知道有一个内置的运算符..<
,叫做半开区间,但是我怎样才能得到一个“两个都开”的区间,也就是说一个区间不包含任何一个终端呢?
使用interval notation时,如果a...b
等价于[a,B],a..<b
等价于[a,b),那么(a,b)在Swift中的等价形式是什么?
理想情况下,我更愿意使用Swift的原生功能来实现这一点,但是如果这不可能,我可以扩展Range
来实现吗?
我试过了,但我还是不知道该怎么做。
我已经知道有一个内置的运算符..<
,叫做半开区间,但是我怎样才能得到一个“两个都开”的区间,也就是说一个区间不包含任何一个终端呢?
使用interval notation时,如果a...b
等价于[a,B],a..<b
等价于[a,b),那么(a,b)在Swift中的等价形式是什么?
理想情况下,我更愿意使用Swift的原生功能来实现这一点,但是如果这不可能,我可以扩展Range
来实现吗?
我试过了,但我还是不知道该怎么做。
2条答案
按热度按时间jyztefdp1#
关于扩展
Range
,SwiftLee的作者Antoine货车Der Lee在这里描述了如何定义自定义运算符:https://www.avanderlee.com/swift/custom-operators-swift/使用自定义中缀运算符的例子从链接的博客文章作为一个模板,我想出了这个扩展来定义您的'both-open'范围:
注意,尽管结果是
Range
(具体地说是ClosedRange<Int>
),但运算符本身实际上是在Int
上定义的。在Swift Playground中运行上述示例代码将生成以下输出
因此,您可以看到,通过使用自定义中缀运算符
>-<
,得到的“both-open”范围从比下限大1的数字开始,向上到比上限小1的数字。(我尝试将该操作符定义为
>.<
,以与半开域操作符..<
并行,但Xcode反对。)eni9jsuy2#
您可以对大多数浮点数使用
nextUp
。(其中
openRange
包括3.0
和5.0
之间的所有值,但不包括3.0
或5.0
)Int
在默认情况下没有这个功能,但是您可以扩展它并做同样的事情。