1

方法

def exp_backoff up_to, url, header = {}                                                                                      
  tries = 0                                                                                                                  
  begin                                                                                                                      
    tries += 1                                                                                                               
    response = JSON.parse(open(url, header).read)                                                                            

    return response                                                                                                          
  rescue OpenURI::HTTPError => e                                                                                             
    if tries < up_to                                                                                                         
      sleep( 2 ** tries )                                                                                                    
      retry                                                                                                                  
    else                                                                                                                     
      return e                                                                                                               
    end                                                                                                                      
  end                                                                                                                        
end   

我正在打电话exp_backoff期待回复,但事实并非如此

  exp_backoff 2, status_url                                                                                                  
  session_token = response['session_token']

收到此错误

undefined local variable or method `response' for main:Object (NameError)
4

2 回答 2

1

您没有为任何东西分配返回值。这将起作用:

response = exp_backoff 2, status_url                                                                                                  
session_token = response['session_token']

但是请注意,您的rescue部分将返回不同的对象并response['session_token']引发未定义的方法错误。也许你应该重新考虑你的方法?最有可能的是,您应该简单地重新引发它,而不是返回异常对象:

rescue OpenURI::HTTPError                                                              
if tries < up_to                                                                                                         
  sleep( 2 ** tries )                                                                                                    
  retry                                                                                                                  
else                                                                                                                     
  raise                                                                                                       
end         
于 2014-03-06T19:49:57.133 回答
0

response您在方法中定义的局部变量exp_backoff只能在exp_backoff. 您不能从该方法定义之外访问它。

当您将某个值分配给方法内的局部变量并返回该值时,变量分配对方法外部没有影响。

于 2014-03-06T19:53:06.467 回答