我不确定这段代码中的'除非'是什么。看起来非常简单。
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]
结果会是什么(在执行语句之后)?
答案 0 :(得分:8)
上面带有unless
的行等同于:
if !@categories[category.name]
@categories[category.name] = []
end
如果@categories[category.name]
为nil或false,则将其更改为空数组[]
。否则就不管它了。
获得相同效果的更好方法是写:
@categories[category.name] ||= []
或将哈希表配置为具有返回[]
的默认proc。