分類方法通常用self.foo
或class << self
來定義。是否有可能創建一個模塊或父類,使Ruby中的所有方法類方法?
是否有可能通過使用模塊或父類來創建所有方法的類方法?
例如:
class Foo
include ClassMethods
def bar
或
class Foo < ClassMethods
def bar
並使用
Foo.bar
會ClassMethods是什麼呢?
分類方法通常用self.foo
或class << self
來定義。是否有可能創建一個模塊或父類,使Ruby中的所有方法類方法?
是否有可能通過使用模塊或父類來創建所有方法的類方法?
例如:
class Foo
include ClassMethods
def bar
或
class Foo < ClassMethods
def bar
並使用
Foo.bar
會ClassMethods是什麼呢?
如果您可以負擔得起Foo
是模塊而不是類,請使用module_function
。
module Foo
module_function
def bar
那麼這將工作:
Foo.bar
轉換您Class
爲Module
,並使用extend self
應該做你想要什麼。對於模塊中的每個方法,它都會創建一個類方法。
所以,你的例子可以寫成:
module Foo
extend self
def bar
另一種方法是使用Module#refine,它可以把一個類到一個模塊。所以你可以創建你的類的一個模塊,然後用你創建的模塊擴展你的類。
根據Ruby風格指南(不是權威性指南,只是社區創建的建議指南),您應該將'module_function'放在'extend self'上:https://github.com/bbatsov/ruby-style-guide #模塊功能 – 2014-09-28 02:01:39