2012-02-20 116 views
0

我试图构建一个与Yahoo Placemaker API进行交互的gem,但我遇到了一个问题。当我尝试运行下面的代码我得到:Ruby命名空间问题

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 

回答

2

我还没有搞清楚正是常量名称解析Ruby中是如何工作的(我认为规则是有点乱在这里),但是从我的经验,它很可能是Net正在抬头在当前命名空间而不是全局命名空间中。尝试使用完全合格的名称:可能发生在这条线

::Net::HTTP::Post.new 

类似的问题:

Yahoo::Placemaker::Result 

你应该要么::Yahoo::Placemaker::Result或更好Result取代它(因为它生活在当前的命名空间)。

0

尝试需要网/ HTTP之前。如果没有定义,Ruby会回落到模块中。

require 'net/http'

+0

忘了将这一点粘贴到我的文章。我更新了我的代码示例。 – 2012-02-20 21:28:39

+0

你究竟在irb中运行得到这个错误? – iltempo 2012-02-20 21:49:13