# Adding instance variables using module include

**URL:** <https://www.ruby-forum.com/t/adding-instance-variables-using-module-include/127361>\
**Category:** Ruby\
**Created:** [January 28, 2008, 4:46pm UTC](https://www.ruby-forum.com/t/adding-instance-variables-using-module-include/127361 "2008-01-28T16:46:06Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![ghoti143](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/90db22/32.png) [@ghoti143](https://www.ruby-forum.com/u/ghoti143)\
**Post date:** [January 28, 2008, 4:46pm UTC](https://www.ruby-forum.com/t/adding-instance-variables-using-module-include/127361/1 "2008-01-28T16:46:06Z")

</div>

Hi there,

If I have a module and class like this:

module VisitMemory  
def mark\_visited(method)  
@methods\_visited \<\< method.my\_declaration\_signature  
end

```
def already_visited?(method)
    @methods_visited.include?(method.my_declaration_signature)
end

```

end

module Guff  
module JavaSource  
class Class  
include VisitMemory  
end  
end  
end

How can i ensure that all instances of Guff::JavaSource::Class is  
going to have the instance variable @methods\_visited ?

So that this will work:

Guff::JavaSource::Class.new.already\_visited?(something)

Thanks very much,  
Mike.

---

<div class="post-metadata">

**Author:** ![ghoti143](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/90db22/32.png) [@ghoti143](https://www.ruby-forum.com/u/ghoti143)\
**Post date:** [January 29, 2008, 12:35pm UTC](https://www.ruby-forum.com/t/adding-instance-variables-using-module-include/127361/2 "2008-01-29T12:35:53Z")

</div>

FWIW, this is the best I could do:

module VisitMemory  
def mark\_visited(method)  
methods\_visited \<\< method.my\_declaration\_signature  
end

```
def already_visited?(method)
    methods_visited.include?(method.my_declaration_signature)
end
def methods_visited
    @methods_visited ||= []
end

```

end

module Guff  
module JavaSource  
class Class  
include VisitMemory  
end  
end  
end

---

<div class="post-metadata">

**Author:** ![ghoti143](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/90db22/32.png) [@ghoti143](https://www.ruby-forum.com/u/ghoti143)\
**Post date:** [January 29, 2008, 2:16pm UTC](https://www.ruby-forum.com/t/adding-instance-variables-using-module-include/127361/3 "2008-01-29T14:16:43Z")

</div>

2008/1/28, removed\_email\_address@domain.invalid [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> ```
> @methods_visited.include?(method.my_declaration_signature)
> 
> ```
> 
> How can i ensure that all instances of Guff::JavaSource::Class is  
> going to have the instance variable @methods\_visited ?

require ‘set’

module VisitMemory  
def mark\_visited(method)  
(@methods\_visited ||= Set.new) \<\< method.my\_declaration\_signature  
end

def already\_visited?(method)  
@methods\_visited and  
@methods\_visited.include?(method.my\_declaration\_signature)  
end  
end

> So that this will work:
> 
> Guff::JavaSource::Class.new.already\_visited?(something)

Cheers

robert
