V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
dopcn
V2EX  ›  iDev

swift 和 Ruby 的 range 操作符范围刚好相反是为了拉仇恨么

  •  
  •   dopcn ·
    dopcn · 2014-07-09 16:11:55 +08:00 · 3740 次点击
    这是一个创建于 3789 天前的主题,其中的信息可能已经有所发展或是发生改变。
    swift
    ..不包含尾
    ...包含首尾

    ruby
    ..包含首尾
    ...不包含尾
    11 条回复    2014-07-10 14:33:42 +08:00
    chonerlee
        1
    chonerlee  
       2014-07-09 16:14:48 +08:00
    包含不包含,傻傻分不清楚
    yujnln
        2
    yujnln  
       2014-07-09 16:19:29 +08:00
    beta 3 给改成 ..< 了
    yangg
        3
    yangg  
       2014-07-09 18:24:31 +08:00
    知乎里面看过一篇文章,找不到地址了,
    一般用 start <= x < end,有几个好处
    1. end - start 的值和结果出来的数字相等
    2. 取自然数时,不需要使用非自然数的 start
    thinker3
        4
    thinker3  
       2014-07-10 01:50:32 +08:00
    我觉得, ruby的选择不正常
    abscon
        5
    abscon  
       2014-07-10 05:22:15 +08:00 via Android
    丙增增的标准模版库里,只用前闭后开式,相当完美。
    前闭后闭式讨好的人群和习惯用1做数组首元素的人群应该是同一类人群
    dorentus
        6
    dorentus  
       2014-07-10 08:41:23 +08:00 via iPhone
    @yangg
    @abscon
    你们俩说的和楼主帖子的主题一点关系都没有
    abscon
        7
    abscon  
       2014-07-10 09:39:57 +08:00
    @dorentus 恩,那就说点有关系的。我认为ruby的选择不好。输入双点号明显比三点号要省力,理应用在更常见的场合。而“前闭后开”区间理应更常见。但是这只是一个规定而已,遵从了不合理的规定也不会怀孕,是吧?
    我相信c/c++程序员更偏爱for( i=0; i<n; ++i )胜过for( i=0; i<=n-1; ++i ),至于swift和ruby的习俗就不清楚了
    dorentus
        8
    dorentus  
       2014-07-10 10:07:29 +08:00
    @abscon

    楼主说的是,Swift 和 Ruby 里面,都自带支持一个数据结构叫 Range,表示一个区间。
    然后这两个语言里面用字面量表示 Range 时,.. 和 ... 的意义刚好相反。仅此而已。

    Ruby 的不知道,Swift 的 Range 又不仅限于整数,用处也不限于作查找时的位置,[1.0, 3.0] 和 [1.0, 4.0) 明显是两个不同的区间,两种方式表现方式肯定都是需要的。

    Ruby 和 Swift 一样,Range 最常用的两个地方,一是在 case 语句里,二是用作下标(只有这种是和你说的那个应用场景一致,而这时你完全可以只用前闭后开的 range literal)。

    但 .. 和 ... 或者 ..> 一个字符的差别而已,谈不上省力不省力吧。没准 Ruby 设计的时候是觉得三点比较好看才选择它作为前闭后开区间的字面量形式的。。。
    abscon
        9
    abscon  
       2014-07-10 10:50:38 +08:00   ❤️ 1
    @dorentus 我看重的“前闭后开”的意义不在于“数值区间”,而在于在算法里如何看待一个序列。“前闭后开”认为每一个序列都会遇到一个超过尾部的“非法元素”,这种表示法我觉得比“前闭后闭”更优雅
    dopcn
        10
    dopcn  
    OP
       2014-07-10 12:35:02 +08:00
    ..>最丑应该没有异议吧
    dorentus
        11
    dorentus  
       2014-07-10 14:33:42 +08:00
    其实如果它的 array literal 不是用 [ ... ] 而是和 C 一样用 { ... } 的话,应该就可以直接用数学里的 [a, b] 和 [a, b) 形式来表示区间了吧……
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2728 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 13:30 · PVG 21:30 · LAX 05:30 · JFK 08:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.