# Conditional class extension

**URL:** <https://www.ruby-forum.com/t/conditional-class-extension/71445>\
**Category:** Ruby\
**Created:** [October 8, 2006, 11:56pm UTC](https://www.ruby-forum.com/t/conditional-class-extension/71445 "2006-10-08T23:56:30Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Trans](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/dfb087/32.png) [@Trans](https://www.ruby-forum.com/u/Trans)\
**Post date:** [October 8, 2006, 11:56pm UTC](https://www.ruby-forum.com/t/conditional-class-extension/71445/1 "2006-10-08T23:56:30Z")

</div>

Is there a better way to do conditional class extension?

module Foo  
if const\_get(:Bar)  
class Bar  
def x; end  
end  
end recue nil  
end

The ‘if const\_get … rescue nil’ doesn’t seem very elegant.

Thanks,  
T.

---

<div class="post-metadata">

**Author:** ![Trans](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/dfb087/32.png) [@Trans](https://www.ruby-forum.com/u/Trans)\
**Post date:** [October 9, 2006, 12:08am UTC](https://www.ruby-forum.com/t/conditional-class-extension/71445/2 "2006-10-09T00:08:30Z")

</div>

Trans wrote:

> Is there a better way to do conditional class extension?
> 
> module Foo  
> if const\_get(:Bar)  
> if defined? Bar

That works if you are referring literally to Bar, but not if you just  
have a variable referring to a string that might or might not be defined  
as a constant in Foo. In that case, you could use  
constants.include?(str).

---

<div class="post-metadata">

**Author:** ![Trans](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/dfb087/32.png) [@Trans](https://www.ruby-forum.com/u/Trans)\
**Post date:** [October 9, 2006, 12:58am UTC](https://www.ruby-forum.com/t/conditional-class-extension/71445/3 "2006-10-09T00:58:33Z")

</div>

On Mon, 2006-10-09 at 06:55 +0900, Trans wrote:

> The ‘if const\_get … rescue nil’ doesn’t seem very elegant.  
> Just a small change, but why not just ask if const\_defined? ?

---

<div class="post-metadata">

**Author:** ![Trans](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/dfb087/32.png) [@Trans](https://www.ruby-forum.com/u/Trans)\
**Post date:** [October 9, 2006, 12:10am UTC](https://www.ruby-forum.com/t/conditional-class-extension/71445/4 "2006-10-09T00:10:31Z")

</div>

Trans wrote:

> The ‘if const\_get … rescue nil’ doesn’t seem very elegant.

if defined? Foo::Bar

# …

end

---

<div class="post-metadata">

**Author:** ![Trans](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/dfb087/32.png) [@Trans](https://www.ruby-forum.com/u/Trans)\
**Post date:** [October 9, 2006, 6:26am UTC](https://www.ruby-forum.com/t/conditional-class-extension/71445/5 "2006-10-09T06:26:54Z")

</div>

Ross B. wrote:

> > The ‘if const\_get … rescue nil’ doesn’t seem very elegant.
> 
> Just a small change, but why not just ask if const\_defined? ?

Oh yea! 🙂

Thanks,  
T.
