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&& ;; x< = r.end. Ruby中的字符串对于排序数字没有特殊行为 - “4”大于“10”,因为“4”大于“1”.因此,任何高于结束值第一个数字的单位数字都不会出现在范围内.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |