我正在研究一个Rails应用程序,并且我希望包含一些功能,这些功能来自我在"Ruby on Rails中获取主机名或IP ".
我在使用它时遇到了问题.我的印象是我应该在lib目录中创建一个文件,因此我将其命名为'get_ip.rb',内容如下:
require 'socket' module GetIP def local_ip orig, Socket.do_not_reverse_lookup = Socket.do_not_reverse_lookup, true # turn off reverse DNS resolution temporarily UDPSocket.open do |s| s.connect '64.233.187.99', 1 s.addr.last end ensure Socket.do_not_reverse_lookup = orig end end
我也曾尝试将GetIP定义为一个类,但是当我按照惯例执行时ruby script/console
,我根本无法使用该local_ip
方法.有任何想法吗?
require
将加载一个文件.如果该文件包含任何类/模块定义,那么您的其他代码现在将能够使用它们.如果文件只包含不在任何模块中的代码,它将像在"require"调用中一样运行(如PHP包含)
include
与模块有关.
它采用模块中的所有方法,并将它们添加到您的类中.像这样:
class Orig end Orig.new.first_method # no such method module MyModule def first_method end end class Orig include MyModule end Orig.new.first_method # will now run first_method as it's been added.
还有extend
像include这样的工作,但不是将方法作为实例方法添加,而是将它们添加为类方法,如下所示:
请注意,当我想访问first_method时,我创建了一个新的Orig
类对象.这就是我所说的实例方法.
class SecondClass extend MyModule end SecondClass.first_method # will call first_method
请注意,在这个例子中,我没有创建任何新对象,只是直接在类上调用方法,就像它一直被定义一样self.first_method
.
所以你去:-)