2

我不确定“除非”在这段代码中做了什么。虽然看起来非常简单。

  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

如果@categories[category.name]为 nil 或 false,则将其更改为空数组[]。否则,它就不管它。

获得相同效果的更好方法是编写:

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

或将您的哈希表配置为具有返回的默认过程[]

于 2012-11-16T06:27:23.357 回答