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