加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 如何找到Range的“有效”结束?

发布时间:2020-12-17 02:46:31 所属栏目:百科 来源:网络整理
导读:Ruby范围的.end是用于指定范围结束的数字,无论范围是否“排除”结尾.我不明白这个设计决定的理由,但从来没有这么简单,我想知道确定范围的“有效结束”的最惯用机制是什么(即最大整数n,使得范围.包括?(n)是的.我所知道的唯一机制是last(1)[0],这看起来很笨拙
Ruby范围的.end是用于指定范围结束的数字,无论范围是否“排除”结尾.我不明白这个设计决定的理由,但从来没有这么简单,我想知道确定范围的“有效结束”的最惯用机制是什么(即最大整数n,使得范围.包括?(n)是的.我所知道的唯一机制是last(1)[0],这看起来很笨拙.

解决方法

使用 Range#max方法:

r = 1...10
r.end
# => 10
r.max
# => 9

如果任何端点为Float,则max不适用于独占范围(有关详细信息,请参阅range.c中的range_max):

(1.0...10.0).max
# TypeError: cannot exclude non Integer end value

(1.0..10.0).max
# => 10.0

作为例外,如果开始>结束,不会引发错误并返回nil:

(2.0...1.0).max
# => nil

更新:max适用于任何包含范围的恒定时间和整数的排他范围,它分别返回与end和end-1相同的值.如果对于范围保持开始>它也是O(1).结束,在这种情况下返回nil.对于非整数对象(String,Date,…)的异常范围或者传递块时,它会调用Enumerable#max,因此它必须遍历范围内的所有元素!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读