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

Ruby范围意外行为

发布时间:2020-12-17 03:43:32 所属栏目:百科 来源:网络整理
导读:任何人都可以了解为什么会发生以下情况? irb(main):001:0 r = '1'..'30'= "1".."30"irb(main):002:0 r.each do |i|irb(main):003:1* puts "#{i} : #{r.include?(i)}"irb(main):004:1 end1 : true2 : true3 : true4 : false5 : false6 : false7 : false8 : f
任何人都可以了解为什么会发生以下情况?

irb(main):001:0> r = '1'..'30'
=> "1".."30"
irb(main):002:0> r.each do |i|
irb(main):003:1* puts "#{i} : #{r.include?(i)}"
irb(main):004:1> end
1 : true
2 : true
3 : true
4 : false
5 : false
6 : false
7 : false
8 : false
9 : false
10 : true
...
(snip.. the String-numbers here evaluate to true)
...
29 : true
30 : true
=> "1".."30"

我希望上面的内容真的很棒.如果我执行以下操作:

irb(main):005:0> r.to_a.each do |i|
irb(main):006:1* puts "#{i} : #{r.to_a.include?(i)}"
irb(main):007:1> end
1 : true
2 : true
...
(snip.. the String-numbers here evaluate to true)
...
29 : true
30 : true
=> ["1","2","3","4","5","6","7","8","9","10","11","12","13","14","
15","16","17","18","19","20","21","22","23","24","25","26","27","28
","29","30"]

然后我得到了我的预期.我是否遗漏了范围如何工作或者这可能是一个错误(可能是前者)?如果这是一个菜鸟问题我提前做坏了.硬/软引用没有区别,对于1到30之间的值,字符串形式的数字范围也会出现同样的问题.

解决方法

这是范围如何在Ruby中工作的怪癖.通过重复调用succ生成对象,但成员资格由x> = r.start&&amp ;; x< = r.end. Ruby中的字符串对于排序数字没有特殊行为 - “4”大于“10”,因为“4”大于“1”.因此,任何高于结束值第一个数字的单位数字都不会出现在范围内.

(编辑:李大同)

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

    推荐文章
      热点阅读