문제

에서 일하고 있어요 레일 앱고 포함해 어떤 기능을"점점 호스트 이름 또는 IP 에 Ruby on Rails"내가 물었습니다.

는 데 문제가 점점 작동합니다.미국에서 내가 만들 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 방법 모두에.어떤 아이디어가?

도움이 되었습니까?

해결책

당신은하지 않은 방법을 설명하려하는 방법을 사용하므로 내가 죄송하는 경우에는 미리 이것은 당신은 당신이 이미 알고있다.

방법은 모듈에 오지 않으로 사용하지 않는 모듈이 포함되어 있으로 클래스입니다.인스턴스에 대한 방법 클래스 요구가 있는 클래스의 인스턴스.아마 당신이 원하는 클래스가 있습니다.고 파일 자체가 로드되어야 하는,일반적으로 일을 통해 필요한 문입니다.

는 경우 다음 코드는 파일에서 getip.rb,

require 'socket'

class GetIP
  def self.local_ip
    orig, Socket.do_not_reverse_lookup = Socket.do_not_reverse_lookup, true

    UDPSocket.open do |s|
      s.connect '64.233.187.99', 1
      s.addr.last
    end
  ensure
    Socket.do_not_reverse_lookup = orig
  end
end

그럼 당신은 그것을 실행할 수 있 말해서,

require 'getip'
GetIP.local_ip

다른 팁

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 와 같은 포함하지 않지만,추가하는 대신 방법 인스턴스 방법,추가로 그들을 클래스 방법은 다음과 같습니다.

참고로,위의 방법 싶을 때 액세스 first_method 을 만들고,새로운 객체의 Orig 클래스입니다.그게 무슨 뜻으로 인스턴스는 방법입니다.

class SecondClass
  extend MyModule
end
SecondClass.first_method # will call first_method

참고로 이 예에서 나는 어떤 새로운 개체를 호출하는 방법에 대해 직접 등으면 그것으로 정의 self.first_method 습니다.

그래서 당신이 갈:-)

requireinclude 은 다른 두 가지입니다.

require 은 엄격하게 파일을 로드하는면에서 부하를 경로입니다.이 loadpath 은 문자열과 이것이 핵심인지를 결정하는 데 사용되는 파일을 이미로드됩니다.

include 을 사용하여"믹스"에서 모듈을 다른 클래스입니다. include 라 모듈 및 모듈 방법이 포함되어 있으로 인스턴스에 대한 방법은 클래스입니다.

  module MixInMethods
    def mixed_in_method
      "I'm a part of #{self.class}"
    end
  end

  class SampleClass
    include MixInMethods
  end

  mixin_class = SampleClass.new
  puts my_class.mixed_in_method # >> I'm a part of SampleClass

하지만 많은 시간을 할 모듈에 혼합되지 않은 같은 파일을 대상으로 클래스입니다.그래서 당신 require 'module_file_name' 그리고 그 안에는 클래스를 수행할 include module.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top