[英]How to pass methods to the services from module where they are used ?(ruby)
For example, I have main_file.rb 例如,我有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
and services/transfer.rb 和服务/transfer.rb
module Services
module Transfer
def self.call(params1, params2)
sender = get_sender(params1)
#some_code
end
end
end
And i can't define get_sender
method exactly in services/transfer.rb as it is used in other services like services/transfer.rb. 而且我无法在services / transfer.rb中准确定义
get_sender
方法,因为它在其他服务(如services / transfer.rb)中使用。
First of all, you do not need to extend self
. 首先,您不需要
extend self
。 Either use module_method
to declare methods as both module and instance, or, which is in your case more appropriate, use an explicit module function declaration. 可以使用
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
This approach is more generic and probably should suit your needs. 这种方法较为通用,可能适合您的需求。
If what you want is to use Exporter
's method get_sender()
on other modules you can: 如果要在其他模块上使用
Exporter
的方法get_sender()
,则可以:
module Services
module Transfer
include Exporter
def self.call(params1, params2)
sender = get_sender(params1)
#some_code
end
end
end
This allows you to use directly get_sender()
inside the module, or Services::Transfer.get_sender()
, actually any method in Exporter (which is being 'include'd) will be available to the module/class including it. 这使您可以直接在模块或
Services::Transfer.get_sender()
使用get_sender()
,实际上Exporter中的任何方法(“包含”在内)都可用于包含它的模块/类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.