Câu hỏi phỏng vấn Ruby
Câu hỏi

Sự khác biệt giữa Module#remove_methodModule#undef_method là gì?

Câu trả lời

Trong Ruby, cả Module#remove_methodModule#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

    ruby Copy
    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 đó

    ruby Copy
    class Parent
    ...
middle

middle

Gợi ý câu hỏi phỏng vấn

middle

Sự khác biệt giữa việc gọi block và gọi phương thức là gì?

middle

Sự khác biệt giữa #==#eql? là gì?

senior

Tại sao Ruby không hỗ trợ overloading phương thức?

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào