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)