teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2020/05/10 11:51

投稿

otn
otn

スコア86363

answer CHANGED
@@ -2,4 +2,16 @@
2
2
 
3
3
  ブロックの中で初めて出てきた変数は、ブロックローカルになります。ブロックが繰り返し実行される場合は、その繰り返しの回のみです。
4
4
 
5
- ということで、ループの前に、`year=nil`とか書いておいて、ブロックで初出とならないようにします。
5
+ ということで、ループの前に、`year=nil`とか書いておいて、ブロックで初出とならないようにします。
6
+
7
+ 逆に、ブロック外で同名の変数が使われているかどうかにかかわらず、ブロックローカル変数を使いたい場合は、
8
+ ```Ruby
9
+ foo=123
10
+ 3.times {|i ; foo| foo = i }
11
+ p foo #=> 123 ・・・ 外の変数には影響しない
12
+
13
+ foo=123
14
+ 3.times {|i| foo = i }
15
+ p foo #=> 2 ・・・外の変数を上書き
16
+ ```
17
+ のように、ブロック引数のところに`;`で区切って書きますので合わせて覚えておきましょう。