Uninitialized constant error with a variables within a module

35 views
Skip to first unread message

trekr67

unread,
Dec 1, 2014, 9:07:58 AM12/1/14
to rubyonra...@googlegroups.com
Hi,

New to ruby development so wondering if someone could help...

I have this code in a file1.rb

#file1.rb

module GG
class GG

::NAME = 'gginfrausermanager'

    end
end

and want to call this variable in another file2.rb with the following code:

#file2.rb

require './file1.rb'
include GG

p "#{GG::NAME} is called from file1.rb"

However when I do a ruby file2.rb I get uninitialized constant GG::NAME.

Can you tell me what I'm doing wrong?

Thanks!

Frederick Cheung

unread,
Dec 1, 2014, 5:01:02 PM12/1/14
to rubyonra...@googlegroups.com


On Monday, December 1, 2014 2:07:58 PM UTC, trekr67 wrote:
[snip]
 
::NAME = 'gginfrausermanager'
[snip] 
and want to call this variable in another file2.rb with the following code:

#file2.rb

require './file1.rb'
include GG

p "#{GG::NAME} is called from file1.rb"

However when I do a ruby file2.rb I get uninitialized constant GG::NAME.

Can you tell me what I'm doing wrong?



There are two things here. First, because you've done ::NAME = (instead of NAME=) this has set the constant at the top level: you've created Object::NAME, not GG::GG::NAME

The second thing is that constant lookup always looks at the current scoping before it starts walking up the lexical scope chain or the ancestry chain: even after you include GG, GG::NAME is referring to the top level GG (i.e. the module not the class)

Fred 

dasibre

unread,
Dec 6, 2014, 12:23:46 PM12/6/14
to rubyonra...@googlegroups.com
What exactly are you trying to achieve???
Reply all
Reply to author
Forward
0 new messages