Ich möchte eine Methode als veraltet markieren, damit die Benutzer ihren Code leicht überprüfen und nachholen können. In Java setzen Sie @Deprecated und jeder weiß, was dies bedeutet.
Gibt es also eine bevorzugte Methode (oder sogar Tools) zum Markieren und Überprüfen auf Verwerfungen in Ruby?
ruby
deprecated
blindgaenger
quelle
quelle
Antworten:
In fast allen Fällen ist je nach Bibliothek oder Metaprogrammierung für eine Abwertung ein Overkill. Fügen Sie dem rdoc einfach einen Kommentar hinzu und rufen Sie die
Kernel#warn
Methode auf. Beispielsweise:Wenn Sie Yard anstelle von rdoc verwenden , sollte Ihr Dokumentkommentar folgendermaßen aussehen:
Wenn Sie sich an tomdoc halten , lassen Sie Ihren Kommentar folgendermaßen aussehen:
Auch nicht vergessen die veraltete Methode in einem zukünftigen (und ordnungsgemäß zu entfernen semver ‚d) Freisetzung . Machen Sie nicht die gleichen Fehler wie die Java-Bibliotheken.
quelle
Die Ruby Standard Library verfügt über ein Modul mit der Warnlogik: https://ruby-doc.org/stdlib/libdoc/rubygems/rdoc/Gem/Deprecate.html . Ich bevorzuge es, meine Verfallsnachrichten auf "normale" Weise zu pflegen:
Beachten Sie, dass Sie mit diesem Ansatz kostenlos Informationen darüber erhalten, wo der Anruf stattgefunden hat.
quelle
0
für ein numerisches Literal macht es oktal und sollte daher wahrscheinlich entfernt werden.deprecate :initialize, UseThisClassInstead, 2017, 5
Wenn Sie gemein sein möchten (unter dem Deckmantel, hilfreich zu sein), können Sie die erste Zeile des Callstacks während einer Warnung ausdrucken, um den Entwicklern mitzuteilen, wo sie einen veralteten Anruf verwenden.
Das ist gemein, weil ich mir ziemlich sicher bin, dass es ein Performance-Hit ist.
Bei korrekter Verwendung enthält dies den absoluten Pfad zu der Datei und Zeile, in der der veraltete Aufruf verwendet wurde. Weitere Informationen zu Kernel :: caller finden Sie hier
quelle
Verwenden von ActiveSupport:
Warnungen sind in der Produktionsumgebung standardmäßig deaktiviert
quelle
Sie können auch
ActiveSupport::Deprecation
(verfügbar in Version 4.0+) als solches verwenden:quelle
Sie haben
libdeprecated-ruby
(2010-2012, 2015 nicht mehr auf rubygem verfügbar)Eine kleine Bibliothek, die Entwicklern helfen soll, mit veraltetem Code zu arbeiten.
Die Idee stammt aus der
D
Programmiersprache ' ', in der Entwickler bestimmten Code als veraltet markieren und dann die Möglichkeit erlauben / ablehnen können, veralteten Code auszuführen.quelle
Sie können das Muster "Klassenmakros" verwenden und Folgendes schreiben:
quelle
Wenn Sie Schienen verwenden, haben Sie die Methode "Modul # veraltet".
quelle
Canivete ist ein Juwel, mit dem Sie Ihre Methoden auf einfache und elegante Weise ablehnen können. Ein bisschen mehr darüber hier .
quelle
Am Ende habe ich eine leichte Methode zusammengestellt:
Um dann eine Methode zu verwerfen, fügen Sie einen Aufruf in den Methodenkörper (oder einen Konstruktor für eine Klasse) ein.
Es ist ziemlich deklarativ und bietet Protokollierung mit relevanten Informationen. Ich bin kein großer Rubyist, daher muss möglicherweise etwas an YMMV angepasst werden.
quelle
Wir können interne Makromethoden verwenden. Beispiel:
class Foo def get_a; puts "I'm an A" end def get_b; puts "I'm an B" end def get_c; puts "I'm an C" end
Ende Ende
veraltet: a ,: get_a veraltet: b ,: get_b veraltet: c ,: get_c end
o = Foo.new p oa
quelle