创建类方法的 2 种主要技术(没有明显的“def self.method”)是:
我个人更喜欢第二种方式,看起来更干净。有没有人有理由更喜欢一种技术而不是另一种?
还有“class_method”方法,但我从未使用过它,它的实现非常复杂,而且似乎比前 2 个方法做得更多。
self.method 当您只需要创建一个没有依赖项或相关逻辑的方法时,这是最简单的选择。
class << self允许您做的不仅仅是在元类上定义方法。当您定义需要与元类的其他部分一起工作的方法时,这很有用(例如,别名现有方法名称)。
例如:
class Logger
class << self
attr_reader :payload
def log(message)
@payload = message
end
end
end
Run Code Online (Sandbox Code Playgroud)
模块扩展方法可用于方法重用和组合多个相关方法。
例如:
module QueryMethods
def find
end
def where
end
end
module FactoryMethods
def build
end
def create
end
end
class BusinessModel
extend QueryMethods
extend FactoryMethods
end
Run Code Online (Sandbox Code Playgroud)