const initialization

D

David Weldon

I think ruby does something strange when it decides if certain constants
have been initialized or not. Take this simple case:

#test.rb
require 'const'
require '/home/dave/foo/const'

#const.rb
DAVE=1

When I run this I get:

/home/dave/foo/const.rb:1: warning: already initialized constant DAVE

...and yes, const.rb is the same one used for both test1.rb and
test2.rb. It seems like ruby hashes the paths to the source files and
complains when they are different - even if both paths reference the
same file in the filesystem. Is there a good way to avoid this? Thanks!
 
P

Phrogz

David said:
I think ruby does something strange when it decides if certain constants
have been initialized or not.
[snip]

It has nothing to do with constants in particular, but (as you were
referring to at the end) whether or not Ruby thinks two required files
are the same. See this:

C:\>type tmp.rb
p( require( 'const' ) )
p( require( 'const.rb' ) )
p( require( 'c:/const.rb' ) )

C:\>ruby tmp.rb
true
false
c:/const.rb:1: warning: already initialized constant FOO
true

The 'false' means that Ruby could tell that it was the same file, and
didn't re-include it. The last 'true' means that Ruby didn't realize
that the two path specifications ended pointed to the same file, and
re-included it. That's when the warning goes off.
 
A

ara.t.howard

I think ruby does something strange when it decides if certain constants
have been initialized or not. Take this simple case:

#test.rb
require 'const'
require '/home/dave/foo/const'

require File.expand_path('const')
require File.expand_path('/home/dave/foo/const')
#const.rb
DAVE=1

When I run this I get:

/home/dave/foo/const.rb:1: warning: already initialized constant DAVE

...and yes, const.rb is the same one used for both test1.rb and
test2.rb. It seems like ruby hashes the paths to the source files and
complains when they are different - even if both paths reference the
same file in the filesystem. Is there a good way to avoid this? Thanks!

-a
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,222
Messages
2,571,142
Members
47,756
Latest member
JulienneY0

Latest Threads

Top