Ruby'除'关键字

时间:2012-11-16 06:23:48

标签: ruby-on-rails ruby

我不确定这段代码中的'除非'是什么。看起来非常简单。

  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]结果会是什么(在执行语句之后)?

1 个答案:

答案 0 :(得分:8)

上面带有unless的行等同于:

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

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

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

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

或将哈希表配置为具有返回[]的默认proc。