2011-04-19 2 views
4
module Foo 
    def self.bar 
    "Module.bar" 
    end 
end 

def Foo 
    "main.Foo" 
end 

puts Foo # Foo 
puts Foo.bar # Module.bar 
puts Foo() # main.Foo 
puts Foo.class # Module 

왜 모듈 Foo과 동일한 공간에 공존하는 방법 Foo 수 있습니까? 왜 Foo 메서드의 정의가 모듈을 덮어 쓰지 않습니까?함께 루비 방법 명명 기존 상수

+0

이 질문은 일반화해야합니다 : 기존 상수 ** 또는 로컬 변수 **와 동일한 메서드 이름을 사용할 수있는 이유는 무엇입니까? – sawa

답변

6

동일한 네임 스페이스에 존재하지 않습니다. 상수와 메서드는 다른 네임 스페이스에 있습니다. 그것이 그들이 공존하는 방식입니다. 언어는 메서드 호출 괄호를 사용하지 않는 한 상수 이름 공간을 조사합니다.이 메서드 호출 괄호는 "이 메서드로 간주됩니다"라고 분명하게 말합니다.

관련 문제