2014-09-06 44 views
0

我有一个日期范围,我想“拉回”一个月。优雅地“移动”范围的值

这是我想出来的:

def pull_back range, value 
    min, max = %i{min max}.map{ |m| range.try(m) - value } 
    min..max 
end 

是否还有更好的 “shift_range” 的方法? 是不是重复?

+0

是什么的'try'?如果它返回'nil',它不会以任何方式崩溃吗? – sawa 2014-09-06 12:50:31

+0

@sawa OP可能不知道'#send','Method#call'等等等等:-) – 2014-09-06 12:55:28

+0

no no。尝试不是因为“范围”不是一个范围。这只是一种避免类似'范围'的自负方式,就像这样:(range.min - value)..(range.max - value) – Humza 2014-09-06 13:46:05

回答

3

你可以做: -

def pull_back range, value 
    range.min - value..range.max - value 
end 
+0

当然是,但我试图避免重复“range。 - value” - 这就是为什么我经历了整个“尝试”的事情:/ 尽管如此,这是我知道的最好的版本,因此我将它标记为答案 – Humza 2014-09-06 13:47:48