我有以下代码:
if(!@stores.nil?) 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
[]
这怎么可能?
答案 0 :(得分:2)
显然@stores
不是nil
,而是初始化为空数组[]
。
所以!@stores.nil?
为真,因为@stores.nil?
为假。我不熟悉logger.info
,所以我不确定为什么会为第三行打印nil
。如果数组中没有元素,则empty?
返回true。
答案 1 :(得分:1)
第一行中的条件是:if !@stores.nil?
- 如果商店不是零。
因此,行@stores.nil?
不能评估为true。实际上,它没有,它显示nil
,这是(更多)false
。意味着@stores
不是零。数组是空的,但它存在,所以一切似乎都没问题。
nil
表示没有对象。空数组仍然是一个对象。