我正在尝试构建一个用于与Yahoo Placemaker API交互的gem,但我遇到了一个问题。当我尝试运行以下代码时,我得到:
NameError: uninitialized constant Yahoo::Placemaker::Net
from /Users/Kyle/.rvm/gems/ruby-1.9.2-p290/gems/yahoo-placemaker-0.0.1/lib/yahoo-placemaker.rb:17:in `extract'
from (irb):4
from /Users/Kyle/.rvm/rubies/ruby-1.9.2-p290/bin/irb:16:in `<main>'
雅虎-placemaker.rb
require "yahoo-placemaker/version"
require 'json'
require 'ostruct'
require 'net/http'
module Yahoo
module Placemaker
def self.extract (text = '')
host = 'wherein.yahooapis.com'
payload = {
'documentContent' => text,
'appid' => APP_ID,
'outputType' => 'json',
'documentType' => 'text/plain'
}
req = Net::HTTP::Post.new('/v1/document')
req.body = to_url_params(payload)
response = Net::HTTP.new(host).start do |http|
http.request(req)
end
json = JSON.parse(response.body)
Yahoo::Placemaker::Result.new(json)
end
end
end
答案 0 :(得分:2)
我还没弄清楚完全常量名称解析如何在Ruby中运行(我认为这里的规则有点混乱),但根据我的经验,很可能是Net
查找当前名称空间而不是全局名称空间。尝试使用完全限定名称:
::Net::HTTP::Post.new
此行中可能会出现类似问题:
Yahoo::Placemaker::Result
您应该将其替换为::Yahoo::Placemaker::Result
或更好Result
(因为它位于当前命名空间中)。
答案 1 :(得分:0)
尝试之前需要net / http。如果没有定义,Ruby会在模块中找回它。
require 'net/http'