Đây là một sự tiếp nối gốc SO câu hỏi này: Using "::" instead of "module ..." for Ruby namespacingRuby - phạm vi từ vựng vs Inheritance
Trong SO câu hỏi ban đầu, đây là kịch bản được trình bày mà tôi vẫn thấy khó hiểu:
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
Ai đó có thể cung cấp một số lời giải thích đằng sau lý do tại sao cuộc gọi đầu tiên trả lại 555 và tại sao cuộc gọi thứ hai trả về 123?
Willson, mà trả lời dưới đây bạn có nghĩ là xứng đáng với tiền thưởng? Cảm ơn – rainkinz
Gợi ý: thêm "đặt Module.nesting" sau khi hai đặt trong mã của bạn. Xem thêm: http://coderrr.wordpress.com/2008/03/11/constant-name-resolution-in-ruby/ –