2014-09-06 45 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