Я хотел бы отметить метод как устаревший, чтобы люди, использующие его, могли легко проверить свой код и наверстать упущенное. В Java вы устанавливаете @Deprecated, и все знают, что это значит.
Итак, есть ли предпочтительный способ (или даже инструменты) отмечать и проверять устаревшие версии Ruby?
ruby
deprecated
blindgaenger
источник
источник
Ответы:
Практически во всех случаях, в зависимости от библиотеки или метапрограммирования, устаревание является излишним. Просто добавьте комментарий к rdoc и вызовите
Kernel#warn
метод. Например:Если вы используете Yard вместо rdoc , ваш комментарий к документу должен выглядеть так:
Наконец, если вы придерживаетесь tomdoc , сделайте так, чтобы ваш комментарий выглядел так:
Кроме того, не забудьте удалить устаревший метод в каком-нибудь будущем (и правильном варианте ) . Не делайте тех же ошибок, что и библиотеки Java.
источник
В стандартной библиотеке Ruby есть модуль с логикой предупреждений: https://ruby-doc.org/stdlib/libdoc/rubygems/rdoc/Gem/Deprecate.html . Я предпочитаю поддерживать мои сообщения об устаревании "стандартным" способом:
Обратите внимание, что при таком подходе вы бесплатно получите информацию о том, где был звонок.
источник
0
для числового литерала делает его восьмеричным, поэтому его, вероятно, следует удалить.deprecate :initialize, UseThisClassInstead, 2017, 5
Если вы хотите быть злым (под видом полезности), вы можете распечатать первую строку стека вызовов во время предупреждения, чтобы разработчики знали, где они используют устаревший вызов.
Это плохо, потому что я почти уверен, что это удар по производительности.
При правильном использовании это будет включать абсолютный путь к файлу и строку, в которой использовался устаревший вызов. Более подробная информация о Kernel :: caller доступна здесь.
источник
Использование ActiveSupport:
По умолчанию предупреждения отключены в производственной среде.
источник
Вы также можете использовать
ActiveSupport::Deprecation
(доступно в версии 4.0+) как таковое:источник
У тебя есть
libdeprecated-ruby
(2010-2012, больше не доступно на rubygem в 2015 году)Небольшая библиотека, предназначенная для помощи разработчикам, работающим с устаревшим кодом.
Идея исходит из
D
языка программирования, где разработчики могут пометить определенный код как устаревший, а затем разрешить / запретить выполнение устаревшего кода.источник
Вы можете использовать шаблон макросов классов и написать что-то вроде этого:
источник
При использовании рельсов у вас есть метод устаревшего модуля #.
источник
Canivete - это жемчужина, которая позволяет вам отказаться от ваших методов простым и элегантным способом. Подробнее об этом здесь .
источник
В итоге я собрал легкий метод:
Затем, чтобы исключить метод, вставьте вызов в тело метода (или конструктор для класса)
Это довольно декларативно и обеспечивает ведение журнала с соответствующей информацией. Я не особо разбираюсь в Rubyist, поэтому может потребоваться некоторая настройка / YMMV.
источник
Мы можем использовать внутренние методы макросов. Пример:
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
конец конец
устаревшие: a,: get_a устаревшие: b,: get_b устаревшие: c,: get_c end
o = Foo.new p oa
источник