Sự khác biệt giữa Module#remove_method
và Module#undef_method
là gì?
Sự khác biệt giữa Module#remove_method
và Module#undef_method
là gì?
Trong Ruby, cả Module#remove_method
và Module#undef_method
đều là các phương thức để loại bỏ một phương thức khỏi một lớp, nhưng chúng có những sự khác biệt nhất định:
Module#remove_method
: Phương thức này hoàn toàn xóa bỏ một phương thức khỏi lớp cụ thể mà nó được gọi. Tuy nhiên, nếu phương thức đó được gọi trên lớp đó, Ruby sẽ tiếp tục tìm kiếm phương thức đó trong các lớp cha hoặc các module được trộn vào (mixin) để tìm một đối tượng có thể nhận phương thức
class Parent
def hello
puts "In parent"
end
end
class Child < Parent
def hello
puts "In child"
end
remove_method :hello
end
c = Child.new
c.hello # => "In parent"
Module#undef_method
: Phương thức này ngăn chặn lớp hiện tại từ việc phản hồi các lời gọi đến phương thức được đặt tên, ngay cả khi phương thức đó có mặt trong lớp cha hoặc module được trộn vào. Khi phương thức này được gọi, nó sẽ gây ra lỗi NoMethodError
khi cố gắng gọi phương thức đó
class Parent
...
middle
Gợi ý câu hỏi phỏng vấn
Chưa có bình luận nào