在脚本中定义局部变量或方法

时间:2016-09-01 13:23:37

标签: ruby

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

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方法时,它抛出以下错误:未定义的局部变量或方法`zbx'for main:Object(NameError)

2 个答案:

答案 0 :(得分:3)

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

我会做第一个选择,因为全局变量应该谨慎使用,但在如此短的脚本中它可能并不重要......

答案 1 :(得分:0)

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