我有一些Ruby代码,它以格式在命令行上显示日期:
-d 20080101,20080201..20080229,20080301
这意味着我要为出现在列表中的其他日期20080201和20080229(含)之间的所有日期和运行.
鉴于我能得到的字符串20080201..20080229什么是将此转换为范围的情况下的最佳途径.目前我正在使用eval,但感觉应该有更好的方法.
@Purfideas我是种寻找一种更普遍的答案类型int..int的任何字符串转换为一个范围,我猜.
Range.new(*self.split("..").map(&:to_i))
但那就是做
ends = '20080201..20080229'.split('..').map{|d| Integer(d)} ends[0]..ends[1]
无论如何,出于安全考虑,我不建议使用eval
没有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