簡體   English   中英

多次為方法別名

[英]Alias a method multiple times

我希望為一個原始方法放置兩個別名,但我沒有看到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?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM