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不适用于独占范围(有关详细信息,请参阅 (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,因此它必须遍历范围内的所有元素! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |