Wenn ich mehr über die Metaprogrammierung von Ruby gelesen habe, haben wir meistens mindestens zwei Lösungen gefunden, um ein Problem zu lösen. Bitte schauen Sie auf folgenden zwei Beispiele:Klasse vs Modul beim Entwurf von Ruby API?
class Base
def self.has_many(*args)
# ...
end
end
class Student < Base
has_many :books
end
Ein anderer Stil:
module Base
def self.included(klass)
klass.extend ClassMethods
end
module ClassMethods
def has_many(*args)
# ...
end
end
end
class Student
include Base
has_many :books
end
Aber wenn wir api entwerfen, müssen wir entscheiden, welche zu benutzen, aber ich möchte Ihre Ideen stellen und einige Best Practices, die die meisten Menschen bereits in ihren Bibliotheken implementiert haben.