11

我希望为一种原始方法设置两个别名,但我看不到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

我对创建自定义方法不感兴趣。

4

3 回答 3

19

我认为没有比仅使用每个更好的方法:

[: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]}
于 2013-11-14T13:51:10.203 回答
3

查看文档和来源alias_method我想说如果没有自定义方法,您想要的东西是不可能的

(只需要回答我几乎同名的:))

于 2013-11-14T13:52:10.607 回答
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?
于 2018-04-09T11:20:23.643 回答