当前位置:  开发笔记 > 后端 > 正文

将Ruby字符串范围转换为Range对象的最佳方法

如何解决《将Ruby字符串范围转换为Range对象的最佳方法》经验,为你挑选了3个好方法。

我有一些Ruby代码,它以格式在命令行上显示日期:

-d 20080101,20080201..20080229,20080301

这意味着我要为出现在列表中的其他日期20080201和20080229(含)之间的所有日期和运行.

鉴于我能得到的字符串20080201..20080229什么是将此转换为范围的情况下的最佳途径.目前我正在使用eval,但感觉应该有更好的方法.

@Purfideas我是种寻找一种更普遍的答案类型int..int的任何字符串转换为一个范围,我猜.



1> ujifgc..:
Range.new(*self.split("..").map(&:to_i))



2> Purfideas..:

但那就是做

ends = '20080201..20080229'.split('..').map{|d| Integer(d)}
ends[0]..ends[1]

无论如何,出于安全考虑,我不建议使用eval



3> theschmitzer..:

没有args的注入适用于两个元素数组:

rng='20080201..20080229'.split('..').inject { |s,e| s.to_i..e.to_i }

当然,这可以是通用的

class Range
  def self.from_ary(a)
    a.inject{|s,e| s..e }
  end
end

rng = Range.from_ary('20080201..20080229'.split('..').map{|s| s.to_i})
rng.class  # => Range

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有