10 Stimmen

Alternativen zum Affen Parcheando Kernklassen

Ich bin noch neu in Ruby und schreibe im Grunde gerade mein erstes Mikroprogramm, nachdem ich Coopers Buch beendet habe. Ich wurde darauf hingewiesen, den Affen Parcheando zu vermeiden, aber das Problem ist, dass ich nicht weiß, was die Alternativen sind, um das gleiche Verhalten zu erreichen. Im Grunde möchte ich eine neue Methode hinzufügen, auf die jedes String-Objekt zugreifen kann. Der offensichtliche monkey-Parcheando Weg ist zu:

class String
  def do_magic
    ...magic...
  end
end

Ich erinnere mich, dass es einen Weg mit String.send gibt. Aber ich kann mich weder daran erinnern, wie es gemacht wird, noch wo ich es gelesen habe. Kann jemand darauf hinweisen, alle Alternativen, die noch lassen Sie mich diese Methode für die String-Klasse und Kind-Objekte zur Verfügung stellen würde?

0voto

emery Punkte 6862

Der von Ihnen beschriebene "Affenpatch" könnte in der Tat ein Problem darstellen, wenn jemand anderes Ihren Code benötigt (z. B. als Gem). Wer sagt, dass sie nicht auch eine String-Methode hinzufügen wollen, die do_magic heißt? Eine Methode wird die andere überschreiben, und das kann schwierig zu debuggen sein. Wenn die Möglichkeit besteht, dass Ihr Code quelloffen ist, dann ist es am besten, eine eigene Klasse zu erstellen:

class MyString < String
  def initialize(str)
    @str = str
  end
  def do_magic
    ...magic done on @str
    @str
  end
end

Wenn Sie nun_magisch arbeiten müssen, können Sie

magic_str = MyString.new(str).do_magic

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