我希望为一个原始方法添加两个别名,但我没有看到alias_method
一次执行多个别名的能力,而是一个接一个。
因此有可能改变这一点:
alias_method :aliased_first_method, :first_method
alias_method :aliased_first_method?, :first_method
这样的事情:
alias_method [:aliased_first_method, :aliased_first_method?], :first_method
我对创建自定义方法不感兴趣。
答案 0 :(得分:17)
我认为没有比使用每种方式更好的方法了:
[:aliased_first_method, :aliased_first_method?].each{|ali| alias_method ali, :first_method}
答案 1 :(得分:2)
查看alias_method
的{{3}},如果没有自定义方法,我会说你想要的是不。
(只需回答我几乎同名的情况:))
答案 2 :(得分:0)
对于未来的观众,我们使用这种方法非常相似:
module HasBulkReplies
extend ActiveSupport::Concern
module ClassMethods
# Defines responses to multiple messages
# e.g. reply_with false, to: :present?
# reply_with "", to: %i(to_s name description)
# reply_with true, to: %i(empty? nothing? void? nix? nada? meaning?)
def reply_with(with, to:)
[to].flatten.each do |message|
define_method message do
with
end
end
end
end
end
这定义了一个允许我们进行的DSL:
class Work
class Codes
class NilObject
include HasBulkReplies
include Singleton
reply_with true,
to: :nil?
reply_with false,
to: %i(
archaeology?
childrens?
educational_purpose?
geographical?
historical?
interest_age?