3

虽然我安装了 gem,但出现以下错误

/rbing.rb:4: uninitialized constant RBing (NameError)
from /Users/bhushan/.rvm/rubies/ruby-1.8.7-p352/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require'
from /Users/bhushan/.rvm/rubies/ruby-1.8.7-p352/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:36:in `require'
from rbing.rb:3

并且此错误仅特定于Ruby 1.8.7并且Jruby相同的文件适用于1.9.2. 什么可能被破坏?

rbing.rb 文件看起来像这样

require 'rubygems'
require 'rbing'
bing = RBing.new("APPID")

rsp = bing.web('infosys', :site => "linkedin.com")
puts rsp.web.results[0].url
4

1 回答 1

1

在 Ruby 1.8 中,当前目录位于加载路径中。因此,当您说require 'rbing',而不是使用 rbing gem 时,Ruby 将查看当前目录,查看一个名为 rbing.rb 的文件(即当前文件),然后重新加载它。因此,当它遇到对 的引用时RBing,Ruby 不知道该怎么做,因为它从未被定义过。(显然 JRuby 也会发生同样的事情,尽管这可能取决于您使用的版本。)您在 Ruby 1.9 中没有看到此错误,因为当前目录不在加载路径中,因此 Ruby 将跳过当前文件并需要 rbing gem。

您可以通过将此行放在文件顶部来确认这一点:

puts "#{__FILE__} was required"

在1.9下,这应该说

rbing.rb was required

在 1.8 和 JRuby 下,这应该说

rbing.rb was required
./rbing.rb was required

(然后失败uninitialized constant RBing)。

tl; dr:将您的文件命名为其他名称。

于 2012-04-09T21:41:31.073 回答