2012-04-02 2 views
0

관습 이외에 루비 블록이나 메서드에서 로컬 상수를 사용하거나 사용하지 않을 이유가 있습니까?Ruby에서 로컬 상수 사용

예를 들어

:

get '/documents/:id' do 
    Doc_id = params[:id] 
    ... 
    ... 
end 

가 작동하는 것 같다 블록 내부

get '/documents/:id' do 
    doc_id = params[:id] 
    ... 
    ... 
end 

대,하지만 방법에 오류 얻을 :

def foo(bar) 
     Foo = bar 
     puts Foo.inspect 
    end 
    => SyntaxError: (irb):11: dynamic constant assignment 
+0

중복 가능 [동적 상수 할당] (http://stackoverflow.com/questions/6712298/dynamic-constant-assignment) –

답변

0

것은이 때문이다를 메서드의 경우 메서드의 모든 호출에서 상수를 실제로 변경합니다. 그런 종류의 상수는 한 번만 초기화 할 수 있습니다. 이것은 블록에 대해서도 중요합니다. 여기 참조 :

m = [1, 2] 
m.each do |t| 
    DOC_id = 123 
    DOC_id = 12 
end 

그런 다음 다음과 같은 오류가 발생합니다 :
(irb):12: warning: already initialized constant DOC_id 
(irb):11: warning: already initialized constant DOC_id 
(irb):12: warning: already initialized constant DOC_id 

도 블록, 당신은 상수를 재 할당 할 수 없음을 증명.

+0

경고는 사용자가 재 할당 할 수 있음을 보여 주지만 그의 책 중 하나에있는 Matz는 잘못 표시했다 Ruby에서 코딩하는 방법 – bjhaid