【问题标题】:Define a local variable or method in a script在脚本中定义局部变量或方法
【发布时间】:2016-09-01 21:28:45
【问题描述】:

我是 ruby​​ 新手,我正在尝试重新构建我的脚本,将一些服务器添加到 zabbix 监视器等。我面临的问题如下:

zbx = ZabbixApi.connect(
  :url => 'http://zabbixserver.net/zabbix/api_jsonrpc.php',
  :user => 'admin',
  :password => 'admin'
)

def createtemplate
   zbx.templates.create(
     :host => "RealDoc MS Template",
     :groups => [:groupid => zbx.hostgroups.get_id(:name => "RealDoc")]
    )  ..../will create Items, graphs etc...
 end

 if templateid.empty?
    createtemplate
 else
     puts "Template Exists"
 end

访问 createtemplate 方法时抛出以下错误: undefined local variable or method `zbx' for main:Object (NameError)

【问题讨论】:

    标签: ruby


    【解决方案1】:

    zbx 不在范围内,因为它不是全局的。你有几个选择。

    要么将其传递给方法

     def createtemplate(zbx)
       zbx.templates.create(
         :host => "RealDoc MS Template",
         :groups => [:groupid => zbx.hostgroups.get_id(:name => "RealDoc")]
        )  ..../will create Items, graphs etc...
     end
    
     if templateid.empty?
        createtemplate zbx
     else
         puts "Template Exists"
     en
    

    或者您可以使用$ 将其设为全局。

    $zbx = ZabbixApi.connect(
      :url => 'http://zabbixserver.net/zabbix/api_jsonrpc.php',
      :user => 'admin',
      :password => 'admin'
    )
    
    def createtemplate
       $zbx.templates.create(
         :host => "RealDoc MS Template",
         :groups => [:groupid => zbx.hostgroups.get_id(:name => "RealDoc")]
        )  ..../will create Items, graphs etc...
     end
    
     if templateid.empty?
        createtemplate
     else
         puts "Template Exists"
     end
    

    我会做第一个选项,因为应该谨慎使用全局变量,但在这么短的脚本中,它可能没那么重要..

    【讨论】:

      【解决方案2】:

      它正在将变量添加到我们的方法 def createtemplate(zbx) ,同样的,当你调用methood时,你会用zbx变量来调用它。

      【讨论】:

        猜你喜欢
        • 2017-01-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-19
        相关资源
        最近更新 更多