나는 Artifice 의 출처를 읽고 있었고 다음을 보았습니다.
module Artifice
NET_HTTP = ::Net::HTTP
# ...
end
라인 : https://github.com/wycats/artifice/blob/master/lib/artifice.rb#L6
Net::HTTP
대신 그냥하지 않는 이유는 무엇입니까? ::Net::HTTP
즉, ::
접두사로 사용할 때 무엇을 의미 합니까?
나는 Artifice 의 출처를 읽고 있었고 다음을 보았습니다.
module Artifice
NET_HTTP = ::Net::HTTP
# ...
end
라인 : https://github.com/wycats/artifice/blob/master/lib/artifice.rb#L6
Net::HTTP
대신 그냥하지 않는 이유는 무엇입니까? ::Net::HTTP
즉, ::
접두사로 사용할 때 무엇을 의미 합니까?
답변:
는 ::
범위 결정 연산자이다. 그것이하는 일은 모듈을 찾을 수있는 범위를 결정하는 것입니다. 예를 들면 :
module Music
module Record
# perhaps a copy of Abbey Road by The Beatles?
end
module EightTrack
# like Gloria Gaynor, they will survive!
end
end
module Record
# for adding an item to the database
end
에 액세스하려면 Music::Record
외부에서의 Music
당신을 사용합니다 Music::Record
.
참조하려면 Music::Record
에서 Music::EightTrack
간단히 사용할 수있는 Record
이 동일한 범위 (즉,의에 정의되어 있기 때문에 Music
).
그러나 Record
데이터베이스와의 인터페이스를 담당 하는 모듈 에 액세스하려면 Ruby가 원하는 것으로 생각 Music::EightTrack
하기 Record
때문에 사용할 수 없습니다 Music::Record
. 이때 범위 확인 연산자를 접두사로 사용하여 전역 / 주 범위를 지정합니다 ::Record
..
module A
def self.method; "Outer"; end
end
module B
module A
def self.method; "Inner"; end
end
A.method # => "Inner"
::A.method # => "Outer"
end
Artifice의 특정한 경우에, 여러분이 보여준 파일의 41 번째 줄 에 내부 Net
모듈 이 정의되어 있습니다. 외부 Net
모듈 에 대한 액세스를 유지하기 위해 ::Net
.