練習Learn Ruby the Hardway時,習題32講到迴圈和陣列。 其中存取陣列時有二種不同的方式:.each和for
這二種方式看起來差不多,但對於程式碼執行結果會讓人有”驚喜”的感覺
二者的差異在於scope,對C/C++或Java等靜態語言來說,在{}內或function內的變數只在local有效
而javascript或ruby對變數的scope則略有不同
如以下的程式碼,for不會建立新的scope;而each會建立新的scope
1 | count = [1, 2, 3, 4, 5] |
我們在使用each時得小心這個特性,以免造成莫名其妙的bug。
參考資料:
stack overflow討論