<div class="colorscripter-code" style="color:#010101; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important; overflow:auto"><table class="colorscripter-code-table" style="margin:0; padding:0; border:none; background-color:#fafafa; border-radius:4px;" cellspacing="0" cellpadding="0"><tr><td style="padding:6px; border-right:2px solid #e5e5e5"><div style="margin:0; padding:0; word-break:normal; text-align:right; color:#666; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height:130%"><div style="line-height:130%">1</div><div style="line-height:130%">2</div><div style="line-height:130%">3</div><div style="line-height:130%">4</div><div style="line-height:130%">5</div><div style="line-height:130%">6</div><div style="line-height:130%">7</div><div style="line-height:130%">8</div><div style="line-height:130%">9</div><div style="line-height:130%">10</div><div style="line-height:130%">11</div><div style="line-height:130%">12</div><div style="line-height:130%">13</div><div style="line-height:130%">14</div><div style="line-height:130%">15</div><div style="line-height:130%">16</div><div style="line-height:130%">17</div><div style="line-height:130%">18</div><div style="line-height:130%">19</div><div style="line-height:130%">20</div><div style="line-height:130%">21</div></div></td><td style="padding:6px 0"><div style="margin:0; padding:0; color:#010101; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height:130%"><div style="padding:0 6px; white-space:pre; line-height:130%"><span style="color:#999999">## 1. 메소드 ##</span></div><div style="padding:0 6px; white-space:pre; line-height:130%">a <span style="color:#0086b3"></span><span style="color:#ff3399">=</span> <span style="color:#ff3399">nil</span></div><div style="padding:0 6px; white-space:pre; line-height:130%"><span style="color:#ff3399">def</span> some_method</div><div style="padding:0 6px; white-space:pre; line-height:130%"> a <span style="color:#0086b3"></span><span style="color:#ff3399">=</span> <span style="color:#308ce5">3</span></div><div style="padding:0 6px; white-space:pre; line-height:130%"><span style="color:#ff3399">end</span></div><div style="padding:0 6px; white-space:pre; line-height:130%">p a <span style="color:#999999">#=> nil</span></div><div style="padding:0 6px; white-space:pre; line-height:130%"> </div><div style="padding:0 6px; white-space:pre; line-height:130%"> </div><div style="padding:0 6px; white-space:pre; line-height:130%"><span style="color:#999999">## 2. 블록 (선언 x) ##</span></div><div style="padding:0 6px; white-space:pre; line-height:130%">(<span style="color:#308ce5">1.</span>.<span style="color:#308ce5">10</span>).each <span style="color:#ff3399">do</span> <span style="color:#0086b3"></span><span style="color:#ff3399">|</span>i<span style="color:#0086b3"></span><span style="color:#ff3399">|</span></div><div style="padding:0 6px; white-space:pre; line-height:130%"> last_odd <span style="color:#0086b3"></span><span style="color:#ff3399">=</span> i <span style="color:#ff3399">if</span> i%<span style="color:#308ce5">2</span> <span style="color:#0086b3"></span><span style="color:#ff3399">!</span><span style="color:#0086b3"></span><span style="color:#ff3399">=</span> <span style="color:#308ce5">0</span></div><div style="padding:0 6px; white-space:pre; line-height:130%"><span style="color:#ff3399">end</span></div><div style="padding:0 6px; white-space:pre; line-height:130%">p last_odd <span style="color:#999999">#=> NameError(undefined local variable or ~~~~)</span></div><div style="padding:0 6px; white-space:pre; line-height:130%"> </div><div style="padding:0 6px; white-space:pre; line-height:130%"> </div><div style="padding:0 6px; white-space:pre; line-height:130%"><span style="color:#999999">## 3. 블록 (선언) ##</span></div><div style="padding:0 6px; white-space:pre; line-height:130%">last_odd <span style="color:#0086b3"></span><span style="color:#ff3399">=</span> <span style="color:#ff3399">nil</span></div><div style="padding:0 6px; white-space:pre; line-height:130%">(<span style="color:#308ce5">1.</span>.<span style="color:#308ce5">10</span>).each <span style="color:#ff3399">do</span> <span style="color:#0086b3"></span><span style="color:#ff3399">|</span>i<span style="color:#0086b3"></span><span style="color:#ff3399">|</span></div><div style="padding:0 6px; white-space:pre; line-height:130%"> last_odd <span style="color:#0086b3"></span><span style="color:#ff3399">=</span> i <span style="color:#ff3399">if</span> i%<span style="color:#308ce5">2</span> <span style="color:#0086b3"></span><span style="color:#ff3399">!</span><span style="color:#0086b3"></span><span style="color:#ff3399">=</span> <span style="color:#308ce5">0</span></div><div style="padding:0 6px; white-space:pre; line-height:130%"><span style="color:#ff3399">end</span></div><div style="padding:0 6px; white-space:pre; line-height:130%">p last_odd <span style="color:#999999">#=> 9</span></div></div><div style="text-align:right; margin-top:-13px; margin-right:5px; font-size:9px; font-style:italic"><a href="
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5; text-decoration:none">Colored by Color Scripter</a></div></td><td style="vertical-align:bottom; padding:0 2px 4px 0"><a href="
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none; color:white"><span style="font-size:9px; word-break:normal; background-color:#e5e5e5; color:white; border-radius:10px; padding:1px">cs</span></a></td></tr></table></div>
루비를 처음 공부하고 있는데 책을 보다가 궁금한 점이 생겼습니다.
위 코드에는 각 1, 2, 3번의 경우에 대해 p 메소드로 출력되는 결과를 주석으로 적었습니다.
1번의 경우
=> 메소드 안의 지역 변수는 외부의 변수를 변경하지 않는 것 같고
2번의 경우
=> 블록 밖에서 last_odd가 선언되지 않아 참조할 수 없기 때문인 것 같고
3번의 경우
=> 이 부분이 궁금합니다. 메소드의 지역 변수는 외부의 변수에 영향을 주지 않았는데
3번을 보면 블록의 지역 변수는 외부 변수에 영향을 줄 수 있는 것처럼 보입니다.
원래 메소드와 블록의 지역 변수는 차이가 있는지 궁금합니다.