我希望为一个原始方法放置两个别名,但我看不到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
我对创建自定义方法不感兴趣。
我认为没有比使用每个更好的方法了:
[:aliased_first_method, :aliased_first_method?].each{|ali| alias_method ali, :first_method}
编辑 2021 Ruby 2.7+
%i[aliased_first_method aliased_first_method?].each{ alias_method _1, :first_method]}
查看文档和alias_method
的来源,我会说如果没有自定义方法,您想要的是不可能的。
(只需要回答我几乎同名的:))
对于未来的观众,我们将这种方法用于非常相似的事情:
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?