在红宝石中没有空

时间:2011-11-19 12:42:45

标签: ruby

我有以下代码:

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

因此,如果@storesnil,则if-end不应执行。但奇怪的是(对我来说)确实如此。在日志中,我看到以下内容:

Storing in recent search
nil
true
[]

这怎么可能?

2 个答案:

答案 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表示没有对象。空数组仍然是一个对象。