Ruby:意外',',期待keyword_end

时间:2017-05-22 21:30:42

标签: ruby syntax syntax-error

对Ruby来说很新,无法在这段代码中看到名称语法错误:

#! /usr/bin/env ruby                                                               

require 'sensu-plugin/metric/cli'                                                  

class MetricAvailableUpdates < Sensu::Plugin::Metric::CLI::Graphite                

  option :scheme,                                                                  
    description: 'Metric naming scheme',                                           
    long: '--scheme SCHEME',                                                       
    short: '-s SCHEME',                                                            
    default: "#{Socket.gethostname}"                                               

  def run                                                                          
    # Get the metrics.                                                             
    output = %x[/usr/lib/update-notifier/apt-check --human-readable]               
    output_lines = output.split(/(\n)/)                                            

    metrics = {}                                                                   

    updates_pattern = " packages can be updated."                                  
    updates = output_lines[0].tr(upgrades_pattern, "").to_i                        
    metrics[:available_updates] = updates                                          

    security_updates_pattern = " updates are security updates."                    
    security_updates = output_lines[2].tr(security_updates_pattern, "").to_i       
    metrics[:available_security_updates] = security_updates                        

    # Print them in graphite format.                                               
    metrics.each do |k, v|                                                         
      output [config[:scheme], k].join('.'), v                                     
    end                                                                            

    # Done                                                                         
    ok                                                                             
  end                                                                              

end 

如果语法错误实际上在本节之前,我可以添加前面的代码。 修改:为每条评论请求添加完整的文件内容

完整错误,如果有用:

./metrics-available-updates.rb:29: syntax error, unexpected ',', expecting keyword_end
      output [config[:scheme], k].join('.'), v

2 个答案:

答案 0 :(得分:3)

如果你玩了一下,你会发现语法错误消失了,当你注释掉有问题的行,或者

output = %x[/usr/lib/update-notifier/apt-check --human-readable] 

当Ruby解析文件时,需要猜测符号是表示方法调用还是变量引用。在这种情况下,output作为变量存在,但是进一步向下,你写

output [config[:scheme], k].join('.'), v

这意味着它突然变成了方法调用。

我承认Ruby lexer应该提供更有用的错误消息....

答案 1 :(得分:0)

添加parentheses

...
metrics.each do |k, v|                                                         
  output([config[:scheme], k].join('.'), v)
end
...