Ponownie otwarto zagnieżdżoną anomalię modułu w Ruby
Dlaczego ponowne otwarcie zagnieżdżonego modułu daje różne wyniki w zależności od użytej składni? Na przykład działa to dobrze:
module A
module E
end
end
module A
module E
def E.e
end
end
end
Ale to:
module A
module E
end
end
module A::E
def E.e
end
end
daje błąd:
reopen.rb:6:in `<module:E>': uninitialized constant A::E::E (NameError)
from reopen.rb:5:in `<main>'
(Zanim ktoś to zaznaczy, obejście problemu polega na użyciuself
zamiast nazwy modułu podczas definiowania E.e, ale tak naprawdę nie jest to punkt tego posta.)