0

私はうまく動作する次の機能を持っています

def holiday_hours_for(holiday)
  hours["holiday_hours"][holiday.to_s] if hours["holiday_hours"][holiday.to_s]
end

私はちょうど仮想属性について学んでおり、この関数のセッター バージョンを理解するのに苦労しています。どうすればこの機能を実現できますか...

def holiday_hours_for(holiday)=(hours)
  self.hours["holiday_hours"][holiday.to_s] = hours if hours["holiday_hours"][holiday.to_s]
end

ありがとう!

更新: 次のことを思いつきましたが、これが最善の方法ですか?

  def update_holiday_hours_for(holiday, hours_text)
    self.hours = Hash.new unless hours
    self.hours["holiday_hours"] = Hash.new unless hours["holiday_hours"]
    self.hours["holiday_hours"][holiday.to_s] = hours_text.to_s
  end
4

1 に答える 1

0

理解しておくべき重要なことは、セッターメソッドは最後に「=」記号を付けて定義されているということです。このような:

def holiday_hours=(some_parameters)
  # some code
end

これは、インスタンス変数@holiday_hoursのセッターメソッドのように動作します。メソッド名は「holiday_hours=」であり、属性@holiday_hoursの値を取得するためにアプリで必要とされるように、1つ以上のパラメーターを取ります。Rubyが次のようなコードを見たとき

holiday.holiday_hours = some_value

定義したsetterメソッドを呼び出します。この割り当てには、setterメソッドにない空白がいくつかありますが。Rubyはこの割り当てを次のように解釈します

holiday.holiday_hours=(some_value)

引数some_valueを使用して、holidayオブジェクトでholiday_hours=メソッドを呼び出す

あなたの投稿から、サンプルメソッドが存在するクラスが何であるかは明確ではありません。変数hours_textが何であるかを推測できますが、パラメーターholidayは何ですか?

于 2012-11-02T21:13:41.360 に答える