Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未初始化常量Ruby_Ruby - Fatal编程技术网

未初始化常量Ruby

未初始化常量Ruby,ruby,Ruby,我正在开发一个ruby应用程序,根据您的ip地址精确定位您的位置。但我遇到了路障。我已经在这个网站上搜索过了,但是我已经找到的解决方案太笼统了 以下是错误: uninitialized constant Place::IpGeocoder (NameError) 我正在开发的代码: require 'socket' require 'geocoder' require 'geokit' class Place def get_location ip = UDPSocket.op

我正在开发一个ruby应用程序,根据您的ip地址精确定位您的位置。但我遇到了路障。我已经在这个网站上搜索过了,但是我已经找到的解决方案太笼统了

以下是错误:

uninitialized constant Place::IpGeocoder (NameError)
我正在开发的代码:

require 'socket'
require 'geocoder'
require 'geokit'


class Place

  def get_location

  ip = UDPSocket.open {|s| s.connect("64.233.187.99", 1); s.addr.last}
  location = IpGeocoder.geocode(ip.to_s())
  end

end

me=Place.new
me.get_location

我已经安装了gems。我是否需要在java中创建它的实例或类似的东西?

您需要这样做,如下所示


IpGeocoder
在模块
Geokit::Geocoders
中定义。因此,要访问该类,您需要使用该类的完整路径,即
Geokit::Geocoders::IpGeocoder
,使用范围解析操作符

,它被称为名称空间。基本上,您所做的是尝试访问位于
Place
类中的
IpGeocoder
常量。除了你没有定义一个常数。您必须给ruby一个方向,告诉它在哪里找到
IpGeocoder
常量。(澄清:在ruby中,类名是常量)

类和方法可能在源代码中声明如下:

module Geokit
  module Geocoders
    class IpGeocoder
    def geocode(ip)
    end
  end
end

正如您在这里看到的,要引用
IpGeocoder
类中的方法,您需要告诉您的类如何到达它。奥雅纳对此进行了简洁的描述

哦,好的,我现在明白了,如果我做一些类似于溶液的事情,它也会是一样的。包括和MultiGeocoder@CalvinJones这意味着您需要提供完整的路径:)好的,非常感谢你的澄清,现在我完全理解了这个概念,上帝保佑你,先生,再次感谢你的帮助
module Geokit
  module Geocoders
    class IpGeocoder
    def geocode(ip)
    end
  end
end