2

このコードで「unless」が何をするのかわかりません。しかし、非常にシンプルに見えます。

  def self.tips_by_categories
    @categories = {}
    # Build up the possible categories
    Tip.all.each do |tip|
      tip.categories.each do |category|
        @categories[category.name] = [] unless @categories[category.name]
        @categories[category.name].push(tip)
      end
    end
    @categories
  end

文字列があれ@categories[category.name] = []ばいいですか?@categories[category.name]

そうでない場合@categories[category.name]、結果として(ステートメントが実行された後)どうなるでしょうか?

4

1 に答える 1

8

がオンになっている行は、unless次と同等です。

if !@categories[category.name]
  @categories[category.name] = []
end

が nil または false の場合@categories[category.name]、それを空の配列に変更します[]。それ以外の場合は、そのままにしておきます。

同じ効果を得るより良い方法は、次のように書くことです:

@categories[category.name] ||= []

または、 を返すデフォルト proc を持つようにハッシュ テーブルを構成します[]

于 2012-11-16T06:27:23.357 に答える