[英]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.