문제
에서 일하고 있어요 레일 앱고 포함해 어떤 기능을"점점 호스트 이름 또는 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
습니다.
그래서 당신이 갈:-)
require
고 include
은 다른 두 가지입니다.
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
.