我有以下代碼:零V/S空的紅寶石
if([email protected]?) then
logger.info ("Storing in recent search")
logger.info(@stores.nil?)
logger.info(@stores.empty?)
logger.info(@stores)
recentsearch = Recentsearch.create({:query => ss, :type=>tt, :ts=>Time.now})
recentsearch.save
end
所以,如果@stores
是nil
,則if-end
應該不會執行。但奇怪的是(對我來說)它確實如此。在日誌中,我看到以下內容:
Storing in recent search
nil
true
[]
這怎麼可能?
我很驚訝日誌中的'nil' - 'nil.nil?'返回'true',其他的都返回'false'。那麼,'nil'從哪裏來? – sarnold
只是一個提示,在紅寶石是第一線一般會除非@ stores.nil寫'?',如果我知道,某種名單被繞過我傾向於使用'除非@ stores.nil? || @ stores.empty?',因爲它處理列表中的兩個「空」情況。 – iain
請注意,ActiveSupport的'Object#blank?'和'Object#present?'在兩種情況下均可用。它們的行爲更像PHP的'empty()',它是一個「無?」和「空?」檢查的組合。 – d11wtq