我一直在思考如果要设计一种语言,我将如何设计“完美”范围文字。对于您不知道的语句中的范围文字,它表示一个值范围,例如1-4。它们最常用于for / foreach循环
似乎应该考虑几个问题
支持包含范围和排除范围,将+1或-1附加到端点似乎有点笨拙且容易出错。
支持步进,因此您可以设置例如偶数或奇数范围
可读性,范围文字描述的内容应该显而易见
明确,范围文字所描述的内容应该完全明确
默认值可能是从包含值到排除值,因为在大多数情况下,这是用于遍历数组等的方式。
无论如何,我所见过的范围文字的一个示例是Ruby,其形式为1..3表示排他性(最后),1 ... 3表示排他性(最后)。您也可以执行1..10.step(5)。经过仔细考虑后,我发现该方法有一些我不喜欢的地方(从我对红宝石的有限了解)
您只能在最后描述包含式和排除式。在描述大多数情况时,它似乎并不一致。
仅需额外增加一个。似乎是使难以看清范围是包含范围还是排除范围的秘诀。我不了解你,但是点变得模糊起来了:)
为范围添加表示法之类的方法似乎将文字的概念与类的概念混合在一起,这似乎有点不一致(即使将范围编译为一个类)
无论如何,在考虑其他选择之后。我想出了这个
- [5..1] 5,4,3,2,1
- [1..5 [ 1,2,3,4
- ] 1..5] 2,3,4,5
- [ 0..5..20] 0,5,10,15,20
等等。我喜欢它,因为[通常会否定一个集合,即使这样与集合形成对比,它也很适合。
我有点担心的一件事是使排他性/包含性指示符是否强制性,即,如果只写1..5,则默认值为1,2,3,4,因为这是数组等的最常见情况。 。它更容易阅读,但更具针对性,如果您不得不写[1..5 [您会早日了解它们的工作原理。
那么,您认为我涵盖了大多数基础,却忽略了某些内容吗?您会否使[]为强制性?您会在编程语言中设计范围文字吗?
候选人
- 括号样式:[0..10 [ ,带有步骤: [0..5..20 [
- 间隔符号:[0..10) ,步长:[0..5..20)
- 感叹为排他。0 ..!10,含步骤:0..5 ..!20
- 不同的步骤。0 ..!20,5
- 但是,这将使默认值* 0..10'包含在内
- 罗:[0至!20 x 5]
我必须说,到目前为止,我最喜欢的是0 ..!10和0..5 ..!20,我只希望默认值0..10成为包容性-独占会更合逻辑
1,5,10,15,20
缺口4,5,5,5 ?!