# Can I set a module context for a block?

**URL:** <https://www.ruby-forum.com/t/can-i-set-a-module-context-for-a-block/49511>\
**Category:** Ruby\
**Created:** [December 5, 2005, 4:19pm UTC](https://www.ruby-forum.com/t/can-i-set-a-module-context-for-a-block/49511 "2005-12-05T16:19:21Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![drjflam](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/ce7236/32.png) [@drjflam](https://www.ruby-forum.com/u/drjflam)\
**Post date:** [December 5, 2005, 4:19pm UTC](https://www.ruby-forum.com/t/can-i-set-a-module-context-for-a-block/49511/1 "2005-12-05T16:19:21Z")

</div>

I’d really like to be able to inject the ‘include Bob’ statement in the  
create method of Bob:

module Bob  
def method\_missing(name, \*params)  
puts “missing: #{name}”  
end  
def self.create(name)  
yield if block\_given?  
puts name  
end  
end

Bob::create(‘hi’) do  
include Bob  
ldstr  
ldc\_i4\_0  
end

Is there a way that I can avoid include Bob in my block?

Thanks  
-John

> **[John Lam's Blog](https://www.iunknown.com/)**
>
> Since 1997

---

<div class="post-metadata">

**Author:** ![drjflam](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/ce7236/32.png) [@drjflam](https://www.ruby-forum.com/u/drjflam)\
**Post date:** [December 5, 2005, 4:31pm UTC](https://www.ruby-forum.com/t/can-i-set-a-module-context-for-a-block/49511/2 "2005-12-05T16:31:39Z")

</div>

John L. wrote:

> end  
> end
> 
> Bob::create(‘hi’) do  
> include Bob  
> ldstr  
> ldc\_i4\_0  
> end
> 
> Is there a way that I can avoid include Bob in my block?

def self.create(name)  
module\_eval do  
yield  
end if block\_given?  
puts name  
end

–  
Neil S. - removed\_email\_address@domain.invalid

‘A republic, if you can keep it.’ – Benjamin Franklin

---

<div class="post-metadata">

**Author:** ![drjflam](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/ce7236/32.png) [@drjflam](https://www.ruby-forum.com/u/drjflam)\
**Post date:** [December 5, 2005, 4:31pm UTC](https://www.ruby-forum.com/t/can-i-set-a-module-context-for-a-block/49511/3 "2005-12-05T16:31:41Z")

</div>

John L. wrote:

> end  
> end
> 
> Bob::create(‘hi’) do  
> include Bob  
> ldstr  
> ldc\_i4\_0  
> end
> 
> Is there a way that I can avoid include Bob in my block?

module Bob  
def method\_missing(name, \*params)  
puts “missing: #{name}”  
end  
def self.create(name,&b)  
obj = Object.new  
obj.extend Bob  
obj.instance\_eval(&b)  
puts name  
end  
end

Bob::create(‘hi’) do  
ldstr  
ldc\_i4\_0  
end

irb(main):001:0\> module Bob  
irb(main):002:1\> def method\_missing(name, _params)  
irb(main):003:2\> puts “missing: #{name}”  
irb(main):004:2\> end  
irb(main):005:1\> def self.create(name,&b)  
irb(main):006:2\> obj = Object.new  
irb(main):007:2\> obj.extend Bob  
irb(main):008:2\> obj.instance\_eval(&b)  
irb(main):009:2\> puts name  
irb(main):010:2\> end  
irb(main):011:1\> end  
=\> nil  
irb(main):012:0\>  
irb(main):013:0_ Bob::create(‘hi’) do  
irb(main):014:1\* ldstr  
irb(main):015:1\> ldc\_i4\_0  
irb(main):016:1\> end  
missing: ldstr  
missing: ldc\_i4\_0  
hi  
=\> nil

Kind regards

```
robert
```

---

<div class="post-metadata">

**Author:** ![drjflam](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/ce7236/32.png) [@drjflam](https://www.ruby-forum.com/u/drjflam)\
**Post date:** [December 5, 2005, 4:35pm UTC](https://www.ruby-forum.com/t/can-i-set-a-module-context-for-a-block/49511/4 "2005-12-05T16:35:44Z")

</div>

Thanks, Robert! Your solution neatly solves my next problem, which was  
how  
to declare a private context for the evaluation of the method\_missing  
elements.

Cheers,  
-John

> **[John Lam's Blog](https://www.iunknown.com)**
>
> Since 1997

module Bob

---

<div class="post-metadata">

**Author:** ![drjflam](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/ce7236/32.png) [@drjflam](https://www.ruby-forum.com/u/drjflam)\
**Post date:** [December 5, 2005, 5:08pm UTC](https://www.ruby-forum.com/t/can-i-set-a-module-context-for-a-block/49511/5 "2005-12-05T17:08:22Z")

</div>

Neil S. wrote:  
[something wrong]

Bah, never mind, I thought I’d removed the ‘include Bob’ when I tested,  
but I hadn’t, heh.

–  
Neil S. - removed\_email\_address@domain.invalid

‘A republic, if you can keep it.’ – Benjamin Franklin
