# {|(a)|} assigns outer local variable

**URL:** <https://www.ruby-forum.com/t/a-assigns-outer-local-variable/112456>\
**Category:** Development\
**Created:** [August 19, 2007, 12:39pm UTC](https://www.ruby-forum.com/t/a-assigns-outer-local-variable/112456 "2007-08-19T12:39:58Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Tanaka\_A](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/c67d28/32.png) [@Tanaka\_A](https://www.ruby-forum.com/u/Tanaka_A)\
**Post date:** [August 19, 2007, 12:39pm UTC](https://www.ruby-forum.com/t/a-assigns-outer-local-variable/112456/1 "2007-08-19T12:39:58Z")

</div>

e$B0J2\<$N$h$&$K!"%V%m%C%/%Q%i%a!\<%?$NJQ?t$X$NB+G{$,0JA0$N$h$&$Ke(B  
e$B30It$N%m!\<%+%kJQ?t$X$NBeF~$K$J$k$3$H$,$"$j$^$9!#e(B

% ./ruby -ve ’  
def m() yield 2 end  
a = 1  
p a  
m {|(a)| p a }  
p a  
’  
ruby 1.9.0 (2007-08-19 patchlevel 0) [i686-linux]  
1  
2  
2

e$B$+$C$3Fb$rB?=EBeF~$H8F$V$;$$$G$9$+$M!#e(B

---

<div class="post-metadata">

**Author:** ![Tanaka\_A](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/c67d28/32.png) [@Tanaka\_A](https://www.ruby-forum.com/u/Tanaka_A)\
**Post date:** [August 23, 2007, 9:43am UTC](https://www.ruby-forum.com/t/a-assigns-outer-local-variable/112456/2 "2007-08-23T09:43:54Z")

</div>

In article [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid),  
Tanaka A. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

> e$B0J2\<$N$h$&$K!“%V%m%C%/%Q%i%a!\<%?$NJQ?t$X$NB+G{$,0JA0$N$h$&$Ke(B  
> e$B30It$N%m!\<%+%kJQ?t$X$NBeF~$K$J$k$3$H$,$”$j$^$9!#e(B

e$B:#;n$9$H!“JQ?t$,30It$N%m!\<%+%kJQ?t$X$NBeF~$K$J$k$3$H$OJQ$o$je(B  
e$B$^$;$s$,!”$5$i$K!"e(Bshadowing outer local variable - a e$B$H$$$&e(B  
e$B7Y9p$,=P$k$h$&$K$J$j$^$7$?!#e(B

% ./ruby -ve ’  
def m() yield 2 end  
a = 1  
p a  
m {|(a)| p a }  
p a  
’  
ruby 1.9.0 (2007-08-23 patchlevel 0) [i686-linux]  
-e:5: warning: shadowing outer local variable - a  
1  
2  
2

shadow e$B$7$F$J$$$N$Ke(B shadow e$B$7$?$H$$$&7Y9p$,=P$k$N$O$"$-$i$+e(B  
e$B$K$\*$+$7$$5sF0$G$9!#e(B

e$B$d$O$j!“$+$C$3$NFb30$G5sF0$rJQ$($k$N$OL5M}$,$”$k$H$$$&$7$k$7e(B  
e$B$G$O$J$$$G$7$g$&$+!#e(B

e$B$J$N$G!"$+$C$3$K$+$+$o$i$:e(B shadow e$B$7$F$O$$$+$,$G$7$g$&$+!#e(B

e$B$“$k$$$O!”$+$C$3$NFb30$G5sF0$rJQ$($kM}M3$,2?$+$"$k$G$7$g$&$+!#e(B

---

<div class="post-metadata">

**Author:** ![Tanaka\_A](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/c67d28/32.png) [@Tanaka\_A](https://www.ruby-forum.com/u/Tanaka_A)\
**Post date:** [August 29, 2007, 8:29am UTC](https://www.ruby-forum.com/t/a-assigns-outer-local-variable/112456/3 "2007-08-29T08:29:33Z")

</div>

e$B$J$+$@$G$9!#e(B

At Sun, 19 Aug 2007 19:38:30 +0900,  
Tanaka A. wrote in [ruby-dev:31507]:

> e$B0J2\<$N$h$&$K!"%V%m%C%/%Q%i%a!\<%?$NJQ?t$X$NB+G{$,0JA0$N$h$&$Ke(B  
> e$B30It$N%m!\<%+%kJQ?t$X$NBeF~$K$J$k$3$H$,$"$j$^$9!#e(B

e$B$3$l$G$I$&$G$7$g$&$+!#e(B

# Index: parse.y

— parse.y (revision 13301)  
+++ parse.y (working copy)  
@@ -7309,5 +7309,7 @@ assignable\_gen(struct parser\_params \*par  
return NEW\_CVASGN(id, val);  
}

- compile\_error(PARSER\_ARG “identifier %s is not valid to set”,  
rb\_id2name(id));

- else {
- compile\_error(PARSER\_ARG “identifier %s is not valid to set”,  
rb\_id2name(id));
- }  
return 0;  
}  
@@ -7322,4 +7324,5 @@ shadowing\_lvar\_gen(struct parser\_params  
else if (dvar\_defined(name) || local\_id(name)) {  
rb\_warningS(“shadowing outer local variable - %s”,  
rb\_id2name(name));
- 

```
  vtable_add(lvtbl->vars, name);

```

}  
}  
Index: bootstraptest/test\_knownbug.rb  
===================================================================  
— bootstraptest/test\_knownbug.rb (revision 13301)  
+++ bootstraptest/test\_knownbug.rb (working copy)  
@@ -3,12 +3,2 @@

# So all tests will cause failure.

# 

- 

-# massign  
-assert\_equal ‘ok’, %q{

- def m()
- yield :ng
- end
- r = :ok
- m {|®|}
- r  
-}, ‘[ruby-dev:31507]’  
Index: bootstraptest/test\_massign.rb  
===================================================================  
— bootstraptest/test\_massign.rb (revision 13301)  
+++ bootstraptest/test\_massign.rb (working copy)  
@@ -14,4 +14,10 @@ assert\_equal ‘[1, 2]’, %q{  
}

+assert\_equal ‘ok’, %q{

- r = :ok
- :ng.tap {|®|}
- r  
+}, ‘[ruby-dev:31507]’
- 

=begin

# generated by this script:
