2014-05-01 2 views
1

저는 프로그래밍 초보자이며 Ruby에 대한 Zed Shaw의 책을 완성하려고합니다. 코드의 마지막 문 for을 이해할 수 없습니다. stateabbrev 변수가 정의되지 않은 경우 소프트웨어에서 해당 값을 가져올 위치를 어떻게 알 수 있습니까?정의되지 않은 변수를 사용하는 문에 대한 Ruby

states = { 
    'Oregon' => 'OR', 
    'Florida' => 'FL', 
    'California' => 'CA', 
    'New York' => 'NY', 
    'Michigan' => 'MI' 
} 

cities = { 
    'CA' => 'San Francisco', 
    'MI' => 'Detroit', 
    'FL' => 'Jacksonville' 
} 

for state, abbrev in states 
    puts "%s state is abbreviated %s and has city %s" % [ 
     state, abbrev, cities[abbrev]] 
end 

답변

1

이러한 변수는 for ... end 반복 내에서만 유효합니다. 블록 {|x| .... x ...}에있는 x과 같은 블록 변수와 유사합니다. 값은 states의 각 요소에 할당되거나 요소의 자연스러운 의미가없는 경우 to_a이 적용됩니다. 이하, estates의 요소

for e in states 
    ... 
end 

할당하고 반복으로 통과 할 때마다 변경된다. states은 해시이므로 ['Oregon', 'OR']과 같은 키 - 값 쌍의 배열이됩니다.

하지만 여기에는 한 가지 더 복잡합니다. 이를 소멸 할당이라고합니다. 할당하는 동안 변수와 객체의 수가 일치하지 않으면 루비는 객체를 가능한 한 많이 배포하려고합니다. 이 경우 두 개의 변수 인 stateabbrev['Oregon', 'OR']과 같은 단일 배열에 할당해야합니다. 루비는 해당 배열을 분해하고 각 요소에 각 요소를 할당합니다.

state # => "Oregon" 
abbrev # => "OR" 
+0

답장을 보내 주셔서 감사합니다! 그것은 나에게 더 분명해. :) – Amir

0
for

- states 해시를 통해,이 경우에 반복 in 구조체; 각 키 - 값 쌍에 대해 state이 키로 설정되고 abbrev이 값으로 설정됩니다. 그래서 첫 번째 시간을 통해, state'Oregon'로 설정하고 abbrev'OR'로 설정 한 후 state'Florida'abbrev로 설정되어 전체 해시를 통해 등등 'FL'로 설정됩니다. 이것은 단순히 Ruby에서 작동하도록 문법이 정의 된 for - in입니다.

+0

고마워요! 이것은 초보자로서 여전히 이상하다는 것을 알았지 만 지금은 더 이해가됩니다. – Amir