# Module#constants excluding superclass

**URL:** <https://www.ruby-forum.com/t/module-constants-excluding-superclass/78253>\
**Category:** Development\
**Created:** [December 4, 2006, 3:45pm UTC](https://www.ruby-forum.com/t/module-constants-excluding-superclass/78253 "2006-12-04T15:45:24Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![nobu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/e9c0ed/32.png) [@nobu](https://www.ruby-forum.com/u/nobu)\
**Post date:** [December 4, 2006, 3:45pm UTC](https://www.ruby-forum.com/t/module-constants-excluding-superclass/78253/1 "2006-12-04T15:45:24Z")

</div>

e$B$J$+$@$G$9!#e(B

[http://jp.rubyist.net/magazine/?0017-CodeReview#l16](http://jp.rubyist.net/magazine/?0017-CodeReview#l16) e$B$K$"$C$?7oe(B  
e$B$N%Q%C%A$G$9!#e(B

e$B$`$7$m!"$=$&$$$&\>l9g$Oe(B const\_get, const\_defined?  
e$B$r;H$C$F$/$l!"e(B  
e$B$H$$$$$?$$5$$b$7$^$9$,!#e(B

- intern.h, object.c, variable.c (rb\_mod\_constants): added an optional  
flag to search ancestors, which is defaulted to true, as well as  
const\_defined? and const\_get.

# Index: eval.c

RCS file: /pub/cvs/ruby/eval.c,v  
retrieving revision 1.958  
diff -U 2 -p -r1.958 eval.c  
— eval.c 7 Nov 2006 09:38:12 -0000 1.958  
+++ eval.c 4 Dec 2006 06:03:42 -0000  
@@ -1907,9 +1907,13 @@ rb\_mod\_nesting(void)

static VALUE  
-rb\_mod\_s\_constants(void)  
+rb\_mod\_s\_constants(int argc, VALUE \*argv, VALUE mod)  
{  
NODE \*cbase = ruby\_cref;  
void \*data = 0;

- if (argc \> 0) {

- return rb\_mod\_constants(argc, argv, rb\_cModule);

- }

- while (cbase) {  
if (!NIL\_P(cbase-\>nd\_clss)) {  
@@ -7953,5 +7957,5 @@ Init\_eval(void)

- rb\_define\_singleton\_method(rb\_cModule, “constants”,  
rb\_mod\_s\_constants, 0);

- rb\_define\_singleton\_method(rb\_cModule, “constants”,  
rb\_mod\_s\_constants, -1);

- rb\_define\_method(rb\_cModule, “constants”, rb\_mod\_constants, 0); /\*  
in variable.c \*/

- rb\_define\_method(rb\_cModule, “constants”, rb\_mod\_constants, -1); /\*  
in variable.c \*/  
rb\_define\_method(rb\_cModule, “const\_get”, rb\_mod\_const\_get, -1);  
rb\_define\_method(rb\_cModule, “const\_set”, rb\_mod\_const\_set, 2);  
Index: variable.c  
===================================================================  
RCS file: /pub/cvs/ruby/variable.c,v  
retrieving revision 1.141  
diff -U 2 -p -r1.141 variable.c  
— variable.c 18 Sep 2006 01:59:00 -0000 1.141  
+++ variable.c 4 Dec 2006 06:17:21 -0000  
@@ -1439,15 +1439,36 @@ rb\_const\_list(void _data)  
/_

- call-seq:

- 
  - 

```
mod.constants => array

```

- 
  - 

- 
  - 

```
mod.constants(inherit=true) => array

```

- 
  - 
  - Returns an array of the names of the constants accessible in
  - _mod_. This includes the names of constants in any included

- 
  - modules (example at start of section).

- 
  - modules (example at start of section), unless the _all_

- 
  - parameter is set to `false`.

- 
  - 

- 
  - IO.constants.include?(“SYNC”) =\> true

- 
  - IO.constants(false).include?(“SYNC”) =\> false

- 
  - 

- 
  - Also see `Module::const_defined?`.  
\*/

VALUE  
-rb\_mod\_constants(VALUE mod)  
+rb\_mod\_constants(int argc, VALUE \*argv, VALUE mod)  
{

- return rb\_const\_list(rb\_mod\_const\_of(mod, 0));

- VALUE inherit;
- st\_table \*tbl;
- 
- if (argc == 0) {
- inherit = Qtrue;
- }
- else {
- rb\_scan\_args(argc, argv, “01”, &inherit);
- }
- if (RTEST(inherit)) {
- tbl = rb\_mod\_const\_of(mod, 0);
- }
- else {
- tbl = rb\_mod\_const\_at(mod, 0);
- }
- return rb\_const\_list(tbl);  
}

---

<div class="post-metadata">

**Author:** ![nobu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/e9c0ed/32.png) [@nobu](https://www.ruby-forum.com/u/nobu)\
**Post date:** [December 4, 2006, 4:07pm UTC](https://www.ruby-forum.com/t/module-constants-excluding-superclass/78253/2 "2006-12-04T16:07:27Z")

</div>

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:29989] Module#constants excluding superclass”  
on Mon, 4 Dec 2006 23:44:13 +0900, Nobuyoshi N.  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

|[http://jp.rubyist.net/magazine/?0017-CodeReview#l16](http://jp.rubyist.net/magazine/?0017-CodeReview#l16) e$B$K$"$C$?7oe(B  
|e$B$N%Q%C%A$G$9!#e(B

e$B%3%\_%C%H$7$F$/$@$5$$e(B(1.9e$B$Ke(B)e$B!#e(B

---

<div class="post-metadata">

**Author:** ![nobu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/e9c0ed/32.png) [@nobu](https://www.ruby-forum.com/u/nobu)\
**Post date:** [December 4, 2006, 4:17pm UTC](https://www.ruby-forum.com/t/module-constants-excluding-superclass/78253/3 "2006-12-04T16:17:28Z")

</div>

e$B@DLZ$G$9!#e(B

In mail “[ruby-dev:29989] Module#constants excluding superclass”  
Nobuyoshi N. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> e$B$J$+$@$G$9!#e(B
> 
> [http://jp.rubyist.net/magazine/?0017-CodeReview#l16](http://jp.rubyist.net/magazine/?0017-CodeReview#l16) e$B$K$"$C$?7oe(B  
> e$B$N%Q%C%A$G$9!#e(B
> 
> e$B$`$7$m!"$=$&$$$&\>l9g$Oe(B const\_get, const\_defined? e$B$r;H$C$F$/$l!"e(B  
> e$B$H$$$$$?$$5$$b$7$^$9$,!#e(B

e$B$$$(!“$”$l$O!"e(Bconst\_get e$B$de(B const\_defined?  
e$B$G$O%@%a$@$+$i:$$k$H$$$&e(B  
e$B$3$H$G$9!#8=\>u$N;EMM$G$O!"e(B

class A  
CONST = 1  
end  
class B  
CONST = 1  
end

e$B$3$N$h$&$J%/%i%9e(B A, B e$B$,$"$k$H$-!"e(BCONST e$B$,e(B B  
e$B$ND\>2\<$Ge(B (e$B:Fe(B) e$BDj5A$5$le(B  
e$B$?$+$I$&$+H=Dj$G$-$^$;$s!#e(B

~ % cat t  
class A  
CONST = 1  
end  
class B \< A  
CONST = 1  
end

p A.const\_defined?(:CONST) == B.const\_defined?(:CONST)  
p A.const\_get(:CONST) == B.const\_get(:CONST)  
p A.const\_get(:CONST).equal?(B.const\_get(:CONST))  
p A.constants.sort == B.constants.sort

~ % forall-ruby t  
ruby 1.8.0 (2003-08-04) [x86\_64-linux]  
true  
true  
true  
true  
ruby 1.8.1 (2003-12-25) [x86\_64-linux]  
true  
true  
true  
true  
ruby 1.8.2 (2004-12-25) [x86\_64-linux]  
true  
true  
true  
true  
ruby 1.8.3 (2005-09-21) [x86\_64-linux]  
true  
true  
true  
true  
ruby 1.8.4 (2005-12-24) [x86\_64-linux]  
true  
true  
true  
true  
ruby 1.8.5 (2006-08-25) [x86\_64-linux]  
true  
true  
true  
true  
ruby 1.8.5 (2006-10-23) [x86\_64-linux]  
true  
true  
true  
true  
ruby 1.9.0 (2006-12-04 patchlevel 0) [x86\_64-linux]  
true  
true  
true  
true

---

<div class="post-metadata">

**Author:** ![nobu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/e9c0ed/32.png) [@nobu](https://www.ruby-forum.com/u/nobu)\
**Post date:** [December 4, 2006, 5:47pm UTC](https://www.ruby-forum.com/t/module-constants-excluding-superclass/78253/4 "2006-12-04T17:47:46Z")

</div>

e$B@DLZ$G$9!#e(B

In mail “[ruby-dev:29992] Re: Module#constants excluding superclass”  
Nobuyoshi N. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> e$B$J$+$@$G$9!#e(B

> 1.9e$B$J$i!"e(BB.const\_defined?(:CONST, false)e$B$GH=JL$G$-$k$O$:$G$9!#e(B

e$B$J$L!\<!#$=$C$A$O0z?t$D$$$F$?$s$G$9$+!#\<:Ni$7$^$7$?!#e(B

# e$B%j%U%!%l%s%9$P$C$+8+$F$?$N$,GT0x$@$C$?!#e(B

# e$B?7$7$$$[$&$ODI2C$7$H$3$&e(B

---

<div class="post-metadata">

**Author:** ![nobu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/e9c0ed/32.png) [@nobu](https://www.ruby-forum.com/u/nobu)\
**Post date:** [December 4, 2006, 4:27pm UTC](https://www.ruby-forum.com/t/module-constants-excluding-superclass/78253/5 "2006-12-04T16:27:33Z")

</div>

e$B$J$+$@$G$9!#e(B

At Tue, 5 Dec 2006 00:16:52 +0900,  
Minero A. wrote in [ruby-dev:29991]:

> class A  
> CONST = 1  
> end  
> class B  
> CONST = 1  
> end
> 
> e$B$3$N$h$&$J%/%i%9e(B A, B e$B$,$"$k$H$-!"e(BCONST e$B$,e(B B e$B$ND\>2\<$Ge(B (e$B:Fe(B) e$BDj5A$5$le(B  
> e$B$?$+$I$&$+H=Dj$G$-$^$;$s!#e(B

1.9e$B$J$i!"e(BB.const\_defined?(:CONST,  
false)e$B$GH=JL$G$-$k$O$:$G$9!#e(B
