在此处的答案旁边,您还可以执行以下操作:
module Prober
class << self
def probe_invoke(type, data = {})
p = Probe.new({:probe_type => type.to_s,
:data => data.to_json, :probe_status => 0, :retries => 0})
p.save
end
# more module instance methods ...
end
end
该class << self
块还将其中的每个方法定义为模块的实例方法。
def Prober.mymethod ...
(它的功能就像用or定义每个方法一样def self.mymethod ...
)
更新 (2014-11-22)
根据 Ruby Style Guide 你应该module_function
改用:
module Prober
module_function # <-- preferred style nowadays
def probe_invoke(type, data = {})
Probe.new(probe_type: type.to_s,
data: data.to_json,
probe_status: 0,
retries: 0)
.save # no need for a temporary variable
end
# more module methods ...
end
我称之为实用程序模块。
顺便说一句:过去更常见的是使用extend self
而不是将方法包装在一个class << self
块中。
我还将上面的代码改编为其他样式指南建议。