我有一个类(它不是ActiveRecord
模型)具有多个类方法。所有类方法都必须弃用。最好的方法是什么?
class MyClass
class << self
def method_to_deprecate_1
...
end
...
def method_to_deprecate_100
...
end
end
end
Ruby有一个特殊的模块Gem::对此不建议使用,这里有一个来自官方文档的例子:
class Legacy
def self.klass_method
# ...
end
def instance_method
# ...
end
extend Gem::Deprecate
deprecate :instance_method, "X.z", 2011, 4
class << self
extend Gem::Deprecate
deprecate :klass_method, :none, 2011, 4
end
end
结果是:
2.5.0 :020 > Legacy.new.instance_method
NOTE: Legacy#instance_method is deprecated; use X.z instead. It will be removed on or after 2011-04-01.
Legacy#instance_method called from (irb):20.
=> nil
2.5.0 :021 > Legacy.klass_method
NOTE: Legacy.klass_method is deprecated with no replacement. It will be removed on or after 2011-04-01.
Legacy.klass_method called from (irb):21.
=> nil
编辑:为了直接回答你的问题,下面是我能想到的最优雅的方式来弃用所有的类方法:
class Kek
class << self
def old_method_1
# ...
end
def old_method_2
# ...
end
extend Gem::Deprecate
# instance methods here are our actual class methods + all of the Object's methods from Ruby
instance_methods(false).each { |method_to_deprecate| deprecate(method_to_deprecate, :none, 2011, 4) }
end
end