Trong Metaprogramming Ruby 2 trong Chương 2 tại "bộ lọc" phần tôi thấy các đoạn mã sau đây Ruby:cải tiến của Ruby gotchas
class MyClass
def my_method
"original my_method()"
end
def another_method
my_method
end
end
module MyClassRefinement
refine MyClass do
def my_method
"refined my_method()"
end
end
end
using MyClassRefinement
MyClass.new.my_method # => "refined my_method()"
MyClass.new.another_method # => "original my_method()" - How is this possible?
Theo tác giả:
Tuy nhiên, cuộc gọi đến
another_method
có thể khiến bạn mất cảnh giác: ngay cả khi bạn gọianother_method
sauusing
, cuộc gọi đếnmy_method
chính nó xảy ra trướcusing
- do đó, nó gọi phiên bản gốc, chưa tinh chế của phương thức.
Điều này hoàn toàn theo dõi tôi.
Tại sao MyClass.new.another_method
in "original my_method()" kể từ khi được sử dụng sau using MyClassRefinement
và tác giả đang cố gắng nói gì ở đây?
Có ai có thể cung cấp giải thích trực quan/tốt hơn không?
Cảm ơn.
Có thể do bản đồ được giới thiệu bởi các sàng lọc chỉ áp dụng cho một phạm vi cụ thể và trong phạm vi định nghĩa ban đầu đó phạm vi không bị ảnh hưởng. – tadman