2014-11-06 2 views
1

Я следующий код (с несколькими отладочных добавленных строк):рубин ошибка: не определен метод `casecmp» для ноль: NilClass

Ruby:

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

Это будет происходить только тогда, когда вы удалите 'state' ключ из re_dict хэша внутри время цикла:

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

+0

Оказалось, что это ошибка программирования сверстников. Не нужно так себя чувствовать. Случилось со мной тоже. :) – Surya

Смежные вопросы