Giả sử đây là một số mã thư viện tùy ý mà tôi không biết về:Tôi có thể phát hiện ra rằng một phương pháp đã bị ghi đè không?
class Foo
def hi
end
end
class Bar < Foo
def hi
end
end
Và giả sử tôi có một số mã nơi tôi qua Bar
như một tham số.
def check(x)
do_something_with(x.method(:hi))
end
Trong ví dụ trên, tôi có thể biết rằng x.hi
(nơi tài liệu tham khảo x
một thể hiện của Bar
) là khác nhau từ Foo#hi
?
Dựa trên câu trả lời Gareth, đây là những gì tôi đã có cho đến nay:
def is_overridden?(method)
name = method.name.to_sym
return false if !method.owner.superclass.method_defined?(name)
method.owner != method.owner.superclass.instance_method(name).owner
end
Hideous? Tuyệt đẹp?
Mặc dù không nhất thiết liên quan, tôi tò mò muốn biết tại sao bạn muốn làm điều này. –
Ngoài ra, có vẻ như bạn chỉ quan tâm đến việc "ghi đè" đối với thừa kế như trái ngược với việc xác định lại phương thức hiện có trên cùng một lớp? –