4 Stimmen

Ruby Klassenvererbung: Wie man verhindert, dass eine öffentliche Methode in den untergeordneten Klassen überschrieben wird

Ist es möglich zu verhindern, dass eine öffentliche Methode in den untergeordneten Klassen überschrieben wird?

class Parent
  def some_method
     #important stuff that should never be overwritten
  end
end

class Child < Parent
  def some_method
     #should not be possible to overwrite (raise an error if a child class tries to do it)
  end
end

Danke!

8voto

WarHog Punkte 8532

Zu diesem Zweck können Sie die Haken "method_added" und "inherited" verwenden:

class Foo
  def self.inherited(sub)
    sub.class_eval do
      def self.method_added(name)
        if name == :some_method
          remove_method name
          raise Exception, "Can't override #{name} method"
        end
      end
    end
  end
end

class Bar < Foo
end

class Bar
  def some_method
  end
end
# => Exception: Can't override some_method method

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X