2014-11-06 68 views
1

我已(加入几调试行)以下代码:红宝石错误:未定义的方法`casecmp”的零:NilClass

红宝石:

re_dict = {} 
re_dict['state'] = 'pending' #set initial status to pending 
puts re_dict, re_dict.class.to_s 
puts re_dict['state'], re_dict['state'].class.to_s 
puts re_dict['state'].casecmp('pending') 
while re_dict['state'].casecmp('pending') == 0 do 
    stuff 
end 

输出

state: pending 
state class: String 
class compared to 'pending': 0 
Completed 500 Internal Server Error in 66ms 

NoMethodError (undefined method `casecmp' for nil:NilClass): 

这是什么造成的?我如何失去我的哈希值?

回答

1

当您从re_dict哈希删除您while循环中'state'键这只会发生:

while re_dict['state'].casecmp('pending') == 0 do 
    puts re_dict 
    re_dict = {} 
end 
#=> {"state"=>"pending"} 
#=> NoMethodError: undefined method `casecmp' for nil:NilClass 

因为,关键'state'已不存在,调用re_dict['state']会给nil,这就是为什么你得到undefined method casecmp' for nil:NilClass

+0

嗯,我感到愚蠢......我正在与另一个编码器。我的代码询问他的状态。他的代码改变了。 – Jeff 2014-11-06 19:45:26

+0

原来是一个同行编程故障..没有必要感受那种方式。也发生在我身上。 :) – Surya 2014-11-06 19:52:50

相关问题