Skip to main content

module_nesting_lookup

🚀 Understanding Constant Lookup in Nested Modules​

Ruby searches constants lexically before going to ancestors. Nesting modules affects how constants are resolved, so structure your modules to avoid unexpected lookups.

module Outer
X = 'outer'

module Inner
X = 'inner'

def self.value
X # 'inner' from current scope
end

def self.outer_x
::Outer::X # 'outer' using top-level lookup
end
end
end

puts Outer::Inner.value # => "inner"
puts Outer::Inner.outer_x # => "outer"