2016-05-10 9 views
1

私はルビーには新しく、日付宝石の構文に精通していませんが、父の日のような休日の日を見つける方法?年、月、曜日とそれがルビーにある週の日付番号の検索方法

ので、移動の休日のための私の現在のクラスは次のようになります。

class MovingHoliday < Holiday 
    def initialize (name, month, day_of_week, week, year=2016) 
     @name = name 
     @month = month 
     @day_of_week = day_of_week 
     @week = week 
     @year = year 
     @my_date = Date.new(year, month, day) 
    end 
end 

、私の入力は次のようになります。

fathers_day = MovingHoliday.new("Fathers Day", 6, "sunday", 4, year) 

6月、「日曜日」はうまくDAY_OF_THE_WEEKです、4はそれが落ちる週です。 これのために変換を行うことができる/できたことがある場合は、構文を理解できません。 そしてrubys Date以外の宝石は使用できません。

+0

あなたはRubyコア[日付ライブラリ](http://ruby-doc.org/stdlib-2.3.1/libdoc/date/rdoc/Date.html)を意味していますか? – tadman

+1

あなたは '@my_date ='を意味すると思いますか?そうでなければ、 'my_date'はメソッドが終了すると失われるローカル変数です。 –

+0

ええ、あなたの右のおかげで。 ^固定 – Alex

答えて

3
class MovingHoliday < Holiday 
    def initialize (name, month, day_of_week, week, year=2016) 
     @name = name 
     @month = month 
     @day_of_week = day_of_week 
     @week = week 
     @year = year 
     @my_date = Date.new(year, month, 1) 
     @my_date += 1 while !my_date.send("#{day_of_week}?") 
     @my_date += (7 * (week - 1)) 
    end 
end 

綺麗ではありませんが、機能します。それは月の最初のものをとり、それが正しい曜日になるまで1日動いてから、適切な週数だけ増加します。

これは、実際の曜日が与えられていることを前提としています。入力を何らかの方法で消毒したい場合や、日曜日から0に変換したい場合があります(日曜日の場合は日曜日は0、日曜日の場合は1を返します)

+0

私は別の方法にその計算を抽出することをお勧めします。 –

+0

合意。これはコンセプトのためのものです。メソッドが終了する前に結果を保存することさえありません –

+0

Ok!しかし、1つの質問はwho'eは '!x.send'は何をするのでしょうか? – Alex

1

dateルビーの宝石ではありません標準ライブラリでは、requireがなければロードされません。 (Rubyではrequireは、デフォルトでロードされていない宝石や標準ライブラリの読み込み用の両方の目的に使用されます)

あなたの日付を計算する組み込み機能他の宝石類は考慮したくないので、自分で書きなさいと思います。

+0

訂正ありがとうございました。 – Alex

関連する問題