# Why NameError?

**URL:** <https://www.ruby-forum.com/t/why-nameerror/146770>\
**Category:** Ruby\
**Created:** [August 25, 2008, 10:57am UTC](https://www.ruby-forum.com/t/why-nameerror/146770 "2008-08-25T10:57:53Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Kyung\_won\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/47e85d/32.png) [@Kyung\_won\_C](https://www.ruby-forum.com/u/Kyung_won_C)\
**Post date:** [August 25, 2008, 10:57am UTC](https://www.ruby-forum.com/t/why-nameerror/146770/1 "2008-08-25T10:57:53Z")

</div>

module M1  
class A  
end  
end

module M2  
class A  
end  
p A # M2::A  
class B  
p A # M2::A  
end  
end

module M3  
include M1  
p A # M1::A  
class B  
p A # NameError (M3:🅱:A)  
end  
end

##############

# Help Me^^

##############

---

<div class="post-metadata">

**Author:** ![Kyung\_won\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/47e85d/32.png) [@Kyung\_won\_C](https://www.ruby-forum.com/u/Kyung_won_C)\
**Post date:** [August 25, 2008, 11:32am UTC](https://www.ruby-forum.com/t/why-nameerror/146770/2 "2008-08-25T11:32:42Z")

</div>

it seems that the interpreter search for a ‘A’ class nested inside B …  
I  
don’t know why…

---

<div class="post-metadata">

**Author:** ![Kyung\_won\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/47e85d/32.png) [@Kyung\_won\_C](https://www.ruby-forum.com/u/Kyung_won_C)\
**Post date:** [August 25, 2008, 11:33am UTC](https://www.ruby-forum.com/t/why-nameerror/146770/3 "2008-08-25T11:33:53Z")

</div>

Hi,

In message “Re: Why NameError ??”  
on Mon, 25 Aug 2008 17:54:00 +0900, Kyung won Cheon  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

|module M1  
| class A  
| end  
|end  
|  
|module M2  
| class A  
| end  
| p A # M2::A  
| class B  
| p A # M2::A  
| end  
|end  
|  
|module M3  
| include M1  
| p A # M1::A  
| class B  
| p A # NameError (M3:🅱:A)  
| end  
|end

Constant look-up goes self → surrounding → super (until Object).  
So, from M3, look-up goes M3 → M1 (A defined here). From M3::B,  
B → M3 → Object (no A found).

```
          matz.

```

---

<div class="post-metadata">

**Author:** ![Kyung\_won\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/47e85d/32.png) [@Kyung\_won\_C](https://www.ruby-forum.com/u/Kyung_won_C)\
**Post date:** [August 25, 2008, 11:35am UTC](https://www.ruby-forum.com/t/why-nameerror/146770/4 "2008-08-25T11:35:04Z")

</div>

On Mon, Aug 25, 2008 at 10:54 AM, Kyung won Cheon  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:  
constants are not included, only methods  
HTH  
Robert

–  
[http://ruby-smalltalk.blogspot.com/](http://ruby-smalltalk.blogspot.com/)

There’s no one thing that’s true. It’s all true.
