Лучшая практика помечать устаревший код в Ruby?

Это указано в файле сборки Gradle, скопируйте файл хранилища ключей в структуру проекта Android Studio, я решил создать новый каталог в приложении под названием keystores: /app/keystores/release.keystore

signingConfigs {
    debug {
        storeFile file('keystores/debug.keystore')
    }
    release {
        storeFile file('keystores/release.keystore')
        keyAlias ...
        storePassword ...
        keyPassword ...
    }
}
buildTypes {
    debug {
        signingConfig signingConfigs.debug
        debuggable true
    }
    release {
        signingConfig signingConfigs.release
        debuggable false
    }
}
121
задан blindgaenger 16 November 2008 в 15:20
поделиться

4 ответа

Поскольку почти все случаи, в зависимости от библиотеки или метапрограммирования для депрекации являются излишеством. Просто добавьте комментарий к rdoc и звоните Kernel#warn метод. Например:

class Foo
  # <b>DEPRECATED:</b> Please use <tt>useful</tt> instead.
  def useless
    warn "[DEPRECATION] `useless` is deprecated.  Please use `useful` instead."
    useful
  end

  def useful
    # ...
  end
end
<час>

, Если Вы используете Двор вместо rdoc, Ваш комментарий документа должен быть похожим на это:

# @deprecated Please use {#useful} instead

Наконец, если Вы придерживаетесь tomdoc, заставляют Ваш комментарий быть похожим на это:

# Deprecated: Please use `useful` instead

Устаревший: Указывает, что метод удерживается от использования и будет удален в будущей версии. НЕОБХОДИМО использовать это для методов документа, которые были Открыты, но будут удалены в следующей основной версии.

<час>

кроме того, не забывают удалять устаревший метод в некотором будущем (и правильно semver 'd) выпуск . Не делайте те же ошибки, которые сделали библиотеки Java.

155
ответ дан Ryan McGeary 16 November 2008 в 15:20
поделиться

Вы действительно имеете libdeprecated-ruby (2010-2012, не доступный больше на rubygem в 2015)

А, небольшая библиотека намеревалась помочь разработчикам, работающим с кодом устаревшим.
идея прибывает из' D' язык программирования, где разработчики могут отметить определенный код, как удерживается от использования и затем позволить/запретить способности выполнить удержанный от использования код.

require 'lib/deprecated.rb'
require 'test/unit'

# this class is used to test the deprecate functionality
class DummyClass
  def monkey
    return true
  end

  deprecate :monkey
end

# we want exceptions for testing here.
Deprecate.set_action(:throw)

class DeprecateTest < Test::Unit::TestCase
  def test_set_action

    assert_raise(DeprecatedError) { raise StandardError.new unless DummyClass.new.monkey }

    Deprecate.set_action(proc { |msg| raise DeprecatedError.new("#{msg} is deprecated.") })

    assert_raise(DeprecatedError) { raise StandardError.new unless DummyClass.new.monkey }


    # set to warn and make sure our return values are getting through.
    Deprecate.set_action(:warn)

    assert_nothing_raised(DeprecatedError) { raise StandardError.new unless DummyClass.new.monkey } 
  end
end
7
ответ дан VonC 16 November 2008 в 15:20
поделиться

Если вы хотите быть злым (под видом полезности), вы можете распечатать первую строку стека вызовов во время предупреждения, чтобы разработчики знали, где они используют устаревший вызов.

Это подло, потому что я почти уверен, что это удар по производительности.

warn Kernel.caller.first + " whatever deprecation message here"

При правильном использовании это будет включать абсолютный путь к файлу и строку, в которой использовался устаревший вызов. Дополнительная информация о Kernel :: caller доступна здесь

13
ответ дан 24 November 2019 в 01:30
поделиться

Canivete - это жемчужина, которая позволяет вам отказаться от ваших методов простым и элегантным способом. Немного подробнее об этом здесь .

1
ответ дан 24 November 2019 в 01:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: