簡體   English   中英

如何將方法從使用方法的模塊傳遞到服務?(紅寶石)

[英]How to pass methods to the services from module where they are used ?(ruby)

例如,我有main_file.rb

 module Exporter
   extend self

   def transfer(params1, params2)
     Services::Transfer.call(params1, params2)
   end

   def get_sender(params1)
     #some_code
   end
 end

和服務/transfer.rb

module Services
  module Transfer
    def self.call(params1, params2)
      sender = get_sender(params1)
      #some_code
    end
  end
end

而且我無法在services / transfer.rb中准確定義get_sender方法,因為它在其他服務(如services / transfer.rb)中使用。

首先,您不需要extend self 可以使用module_method來將方法聲明為模塊和實例,或者,更合適的是,使用顯式的模塊函數聲明。

module Exporter
 def self.transfer(*params)
   Services::Transfer.call(self, :get_sender, *params)
 end

 def self.get_sender(params1)
   #some_code
 end
end

module Services
  module Transfer
    def self.call(receiver, method, *params)
      sender_param, *other_params = params
      sender = receiver.public_send(method, sender_param)
      #some_code
    end
  end
end

這種方法較為通用,可能適合您的需求。

如果要在其他模塊上使用Exporter的方法get_sender() ,則可以:

module Services
  module Transfer
    include Exporter
    def self.call(params1, params2)
      sender = get_sender(params1)
      #some_code
    end
  end
end

這使您可以直接在模塊或Services::Transfer.get_sender()使用get_sender() ,實際上Exporter中的任何方法(“包含”在內)都可用於包含它的模塊/類。

暫無
暫無

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

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