24

有没有办法为我计划删除并希望记录其使用情况的应用程序中的方法和/或关联创建自定义弃用通知?我的一个模型中有一个关系,我不想继续使用它,并计划在以后重构代码。每次调用该方法时,我想在我的开发日志中创建一个通知。

在使用某些方法时,我在 Ruby/Rails 中看到过弃用通知,并且认为必须有一种简单的方法来做到这一点。

就像是...

irb(main):001:0> 1.id
(irb):1: warning: Object#id will be deprecated; use Object#object_id
=> 3
4

4 回答 4

42

在 Rails 3 中,您可以使用ActiveSupport 中的 : "deprecate" 方法

class Example
  def foo
  end

  deprecate :foo
end

它将为您的方法创建一个别名并输出带有堆栈跟踪的警告。您也可以直接使用此功能的一部分,例如:

ActiveSupport::Deprecation.warn("Message")

它将连同消息一起输出堆栈跟踪。

于 2011-08-18T18:24:53.063 回答
6

也许:

def old_relationship
  warn "[DEPRECATION] old_relationship is deprecated."
  @old_relationship
end

def old_relationship=(object)
  warn "[DEPRECATION] old_relationship is deprecated."
  @old_relationship = object
end

沿着这些路线建立关系。

于 2010-02-17T20:48:54.373 回答
2

在大多数情况下,您只需发出警告并调用新方法即可。

class Example
  # <b>DEPRECATED:</b> Please use <tt>good_method</tt> instead.
  def bad_method
    warn "`bad_method` is deprecated. Use `good_method` instead."
    good_method
  end

  def good_method
    # ...
  end
end

如果您需要或想要变得更高级,可以使用库或元编程,但总的来说,这不是一个简单的好方法。你应该有一个很好的理由来为这么简单的东西引入依赖。

于 2010-02-17T20:47:25.257 回答
1

添加我的 2 美分:

如果您使用Yard而不是rdoc,您的文档注释应如下所示:

# @deprecated Please use {#useful} instead

最后,如果您坚持tomdoc,请让您的评论如下所示:

# Deprecated: Please use `useful` instead

已弃用:表示该方法已弃用,将在未来版本中删除。您应该使用它来记录公开但将在下一个主要版本中删除的方法。

于 2017-02-23T10:42:26.640 回答