ruby代码中未定义的局部变量

时间:2014-03-28 06:58:20

标签: ruby-on-rails ruby

在以下代码中

@vmip_and_port = "173.16.2.80:9090"

def post(url, data)
  uri = URI.parse(url)
  http = Net::HTTP.new(uri.host, uri.port)
  request = Net::HTTP::Post.new(uri.request_uri)
  request.set_form_data(data)
  response = http.request(request)

  return response
end

def click_inapp(id)
 res = post("http://" + vmip_and_port + "/" , {"command" => "4x6papper-hp2420-form", "id" => id})
 return res.body
end

click_inapp("1")

我正在

rb:17:in `click_inapp': undefined local variable or method `vmip_and_port' for main:Object (NameError)
    from app_utilities.rb:21:in `<main>'

3 个答案:

答案 0 :(得分:1)

您定义了一个实例变量,但您使用的是局部变量。所以最好在你的方法中使用它

def click_inapp(id)
 vmip_and_port = "173.16.2.80:9090"
 res = post("http://" + vmip_and_port + "/" , {"command" => "4x6papper-hp2420-form", "id" => id})
 return res.body
end

答案 1 :(得分:1)

def click_inapp(id)
 res = post("http://" + @vmip_and_port + "/" , {"command" => "4x6papper-hp2420-form", "id" => id})
 return res.body
end

答案 2 :(得分:1)

实例变量是自我限制的。如果自我变化,它会有所不同。在您的情况下,您定义了一个实例变量,但您没有使用它。如果IP地址是持久的,那么最好制作是不变的,并在整个课程中使用它。

因此,请将vmip_and_port设为常量,如下所示:

VmipAndPort = "173.16.2.80:9090"

def click_inapp(id)
 res = post("http://" + VmipAndPort + "/" , {"command" => "4x6papper-hp2420-form", "id" => id})
 return res.body
end