2014-12-23 3 views
1

아래 코드에서 Ruby 로컬 변수에 이상한 동작이 나타났습니다. Ruby가 잘못된 부분에 빠져서 params을 nil로 설정 한 것 같습니다. irb의 코드는 다음과 같습니다.Ruby의 이상한 지역 변수 동작

2.1.2 :001 > def params 
2.1.2 :002?> {a:1} 
2.1.2 :003?> end 
2.1.2 :014 > def go1! 
2.1.2 :015?> p params 
2.1.2 :016?> if false 
2.1.2 :017?>  params = 1 
2.1.2 :018?> end 
2.1.2 :019?> p params 
2.1.2 :020?> end 
=> :go1! 
2.1.2 :021 > go1! 
{:a=>1} 
nil 
=> nil 

누구든지 설명 할 수 있습니까?

+0

도 참조 : http://stackoverflow.com/a/12708516/2988 –

답변

3

Ruby는 코드를 구문 분석하는 동안 로컬 변수의 수명을 결정하므로 params = 1 할당에 도달하지 않아도 params은이 범위에서 로컬 변수로 해석됩니다 (기본적으로 nil으로 설정 됨).

http://docs.ruby-lang.org/en/2.1.0/syntax/assignment_rdoc.html#label-Local+Variables+and+Methods

+0

유 일부 문서가이 기능에 대한 링크를 제공 할 수 있습니다

여기에 문서에 대한 링크입니다? 나는 하루 동안 혼란 스러웠다 .... – Spec

+0

그러나 params가 이미 사용 가능하다면 지역 변수로 다루어서는 안된다. –

+0

@Spec 관련 문서의 링크가 포함되었습니다. –