2012-09-09 87 views
3

我對Ruby很新,我試圖擴展Date類以添加一個函數,該函數將返回該月的第一個星期日。這是爲了幫助繪製每月的日曆。所以說九月從星期六開始。然後我想這個函數返回8月26日,因爲這是日曆需要首先繪製的日期。Ruby擴展Date類添加新方法

我有這個工作在內部評級爲:

fs = Date.today - Date.today.mday + 1 
fs = fs - fs.wday 

所以現在我想擴展的日期類作爲

class Date 
    def first_of_month 
    return Date.new(self.year, self.month, 1) 
    end 

    def first_sunday_of_first_week 
    return self.first_of_month - self.wday 
    end 
end 

在第一個月方法似乎很好地工作。 本月的第一個星期日沒有。我認爲這與Date.new失蹤有關,但無論我如何嘗試重做,似乎都不起作用。我正在製作Sinatra應用程序,所以我沒有這樣做的導軌功能。

此處的函數返回兩個方法的月份的第一個,並且不返回該月的第一個星期日。

如何正確得到這個擴展方法的工作?由於

UPDATE:

class Date 
    def first_of_month 
    return Date.new(self.year, self.month, 1) 
    end 

    def first_sunday_of_first_week 
    first_of_month - first_of_month.wday 
    end 
end 

這似乎是工作,但它是正確的還是我迫使更多的工作比需要。這是不是創建Date.new返回一個?

+0

'return'後的'='使得它不能編譯。你究竟擁有什麼? –

+0

一切,但= =,對不起。我更新了這篇文章。 –

+0

你的問題是什麼?什麼不工作? – apneadiving

回答

2

您不需要self.method,也不需要return,您只需編寫method以使其更加簡潔。 的問題是,你只是減去當前日期的wday,但你需要減去當月

def first_sunday_of_first_week 
    first_of_month - first_of_month.wday 
end 

爲我工作的第一天wday。

要將更新:

def first_sunday_of_first_week 
    first = Date.new(year, month, 1) 
    first - first.wday 
end 

你的方法調用first_of_month方法的兩倍,因此日期被創建兩次:您可以通過避免first_of_month方法和做它通過以下方式,而不是使之效率的兩倍在我的版本中,只創建一個實例。如果性能是一個問題,這將會更有效率。

+0

完美。非常感謝。 –