Si tratta di questo originale domanda SO una continuazione: Using "::" instead of "module ..." for Ruby namespacingRubino - scope lessicale vs Inheritance
Nella domanda iniziale SO, qui è lo scenario presentato, che sto ancora avendo difficoltà a capire:
FOO = 123
module Foo
FOO = 555
end
module Foo
class Bar
def baz
puts FOO
end
end
end
class Foo::Bar
def glorf
puts FOO
end
end
puts Foo::Bar.new.baz # -> 555
puts Foo::Bar.new.glorf # -> 123
Qualcuno può fornire qualche spiegazione sul motivo per cui la prima chiamata restituisce 555 e perché la seconda chiamata restituisce 123?
Willson, che risponde sotto pensi che sia degno della bontà? Grazie – rainkinz
Suggerimento: aggiungi "puts Module.nesting" dopo che le due inseriscono il tuo codice. Vedi anche questo: http://coderrr.wordpress.com/2008/03/11/constant-name-resolution-in-ruby/ –