# Why does this include fail in instance\_exec?

**URL:** <https://www.ruby-forum.com/t/why-does-this-include-fail-in-instance-exec/171158>\
**Category:** Ruby\
**Created:** [June 27, 2009, 8:01am UTC](https://www.ruby-forum.com/t/why-does-this-include-fail-in-instance-exec/171158 "2009-06-27T08:01:25Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![charlton](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/c5a1d2/32.png) [@charlton](https://www.ruby-forum.com/u/charlton)\
**Post date:** [June 27, 2009, 8:01am UTC](https://www.ruby-forum.com/t/why-does-this-include-fail-in-instance-exec/171158/1 "2009-06-27T08:01:25Z")

</div>

The following code will dynamically create a class, C, inside of module  
A. Class C would like to include module B which is also defined in  
module A but the ‘include B’ line for C fails with `module\_eval’:  
uninitialized constant Class::B (NameError).

I’ve included a class D definition as well which obviously works.

```
module A
end

def create_class(c, &b)
    klass = A.const_set(c.capitalize, Class.new)
    klass.instance_exec(&b)
end
A.module_eval <<-EOF
    module B
        def self.append_features(m)
            puts "B"
        end
    end
    class D
        include B
    end
    create_class :c do
        include B
    end
EOF

```

Any insight would be greatly appreciated.

Thanks,  
Charlton

---

<div class="post-metadata">

**Author:** ![charlton](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/c5a1d2/32.png) [@charlton](https://www.ruby-forum.com/u/charlton)\
**Post date:** [June 27, 2009, 8:31am UTC](https://www.ruby-forum.com/t/why-does-this-include-fail-in-instance-exec/171158/2 "2009-06-27T08:31:52Z")

</div>

I found a post that address this. I guess the nature of  
instance\_exec/eval has changed with respect to bindings.

[http://coderrr.wordpress.com/2009/06/02/fixing-constant-lookup-in-dsls-in-ruby-1-9/](http://coderrr.wordpress.com/2009/06/02/fixing-constant-lookup-in-dsls-in-ruby-1-9/)

Charlton Wang wrote:

> The following code will dynamically create a class, C, inside of module  
> A. Class C would like to include module B which is also defined in  
> module A but the ‘include B’ line for C fails with `module\_eval’:  
> uninitialized constant Class::B (NameError).
> 
> I’ve included a class D definition as well which obviously works.
> 
> ```
> module A
> end
> 
> def create_class(c, &b)
> klass = A.const_set(c.capitalize, Class.new)
> klass.instance_exec(&b)
> end
> A.module_eval <<-EOF
> module B
> def self.append_features(m)
> puts "B"
> end
> end
> class D
> include B
> end
> create_class :c do
> include B
> end
> EOF
> 
> ```
> 
> Any insight would be greatly appreciated.
> 
> Thanks,  
> Charlton
