当前位置:  开发笔记 > 编程语言 > 正文

向Rails添加功能

如何解决《向Rails添加功能》经验,为你挑选了1个好方法。

我正在研究一个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方法.有任何想法吗?



1> Orion Edward..:

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.

所以你去:-)

推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有