2012-09-09 67 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

完美。非常感谢。 –