2016-07-25 37 views
0

我最近开始做一个宝石为我的项目之一,但是当它到达的某一部分,而运行它只是停止执行,并向右走到底,并返回一个空数组。问题是在parse_results功能插件停止执行代码而不产生错误

def parse_results(result) 
    puts result 
    result_hash = Hash.new 
    result_hash["url"] = result.id 
    result_hash["score"] = result.rule_groups["SPEED"].score 

    result_hash["rule_results"] = Hash.new 
    # it cuts out right as it tries this puts command below, nothing is output 
    puts result_hash["rule_results"]["AvoidLandingPageRedirects"].localized_rule_name 
    rule_result_names = ["AvoidLandingPageRedirects", "EnableGzipCompression", "LeverageBrowserCaching", "MainResourceServerResponseTime", "MinifyCss", "MinifyHTML", "MinifyJavaScript", "MinimizeRenderBlockingResources", "OptimizeImages", "PrioritizeVisibleContent"] 
    rule_result_names.each do |rule| 
    puts rule 
    result_hash["rule_results"][rule] = Hash.new 
    result_hash["rule_results"][rule]["name"] = result.formatted_results.rule_results[rule].localized_rule_name 
    result_hash["rule_results"][rule]["impact"] = result.formatted_results.rule_results[rule].rule_impact 
    result_hash["rule_results"][rule]["advice"] = result.formatted_results.rule_results[rule].format 
    end 
    puts result_hash 
    return result_hash 
end 

这种尝试做,即使阵列树立优良的.each一部分时,它会切出之前。任何线索,为什么会发生这种情况?网址和分数都设置得很好。它正在通过来自Google的Json/Hash对象,这是有效的。这也是不寻常的,因为这些命令在我用pry进行调试时工作得很好,至少现在代码截断了puts命令。让我知道是否需要其他任何东西。提前致谢!

+0

有时奇怪的错误,错误在开发的宝石是因为你没有加载你的宝石的正确版本。你确定你实际上是加载了你的宝石的最新版本,而不是一些测试代码或以前的版本,因为你忘了正确提交代码。除非您在异常处理程序中运行该方法,否则方法通常不会在没有错误的情况下停止执行中间流。 – Casper

+0

@Casper据我所知,我根本没有更新它的版本,只是坚持默认的0.1.0,并一直在使用它。这听起来像一个错误,但它会发生。我会在明天尝试更新版本。如果我有相互矛盾的版本,这也会发生吗? – KJS

+0

我的意思是你确定你的程序正在加载你认为正在加载的gem。但从你的其他反应看来,它正在加载正确的。一个简单的测试是修改你的宝石,并在代码中添加一行例如'puts'TEST“',看看你的程序是否打印这行。 – Casper

回答

0

的问题最终被调用这一功能。给定的功能依赖于批量调用谷歌的apis。它会尝试更新结果我给它的块,并会导致在此parse_results功能像这些

0

什么都没有输出,因为result_hash["rule_results"]是一个空的哈希值。

实际上,这是发生了什么事:

2.2.2 :001 > some = Hash.new 
=> {} 
2.2.2 :002 > puts some['foo'].bar 
NoMethodError: undefined method `bar' for nil:NilClass 

这有可能是你没有看到一个例外,因为有些部分代码或创业板公司正在吞噬异常,并返回一个空数组。

+0

啊// @ pdoherty926你为放在第一位说法绝对正确的,它应该是'result.formatted_results.rule_results [“AvoidLandingPageRedirects”]'。但我仍然遇到了该行被省略的问题。你看到任何会干扰'.each'声明的东西吗? – KJS

+1

没有什么会跳出来对我。我建议在每个循环中进行静态突变,以确认您的实验开始。例如'result_hash [“rule_results”] [rule] = rule'。你是否正在拯救'Exception'或其他什么地方,以防止你看到这种方法可能产生的任何错误? – pdoherty926