루비 : :: 접두사는 무엇을합니까?
나는 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
.
::
연산자 전역 대신 지역을 지칭한다. 이 질문은 이전에도 요청되었습니다.
참고 URL : https://stackoverflow.com/questions/5032844/ruby-what-does-prefix-do
'code' 카테고리의 다른 글
C # 리플렉션 : 문자열에서 클래스 참조를 얻는 방법? (0) | 2020.10.04 |
---|---|
개발 모드에서 설치된 Python 모듈 제거 (0) | 2020.10.04 |
Javascript의 다차원 객체 / 배열에서 값을 찾는 방법은 무엇입니까? (0) | 2020.10.04 |
Elixir 문자열을 정수 또는 부동 소수점으로 변환 (0) | 2020.10.04 |
C #에서 XML을 다루는 방법 (0) | 2020.10.04 |