关于Rails框架的代码问题

关于Rails框架的代码问题

问题描述:

我注意到,在Rails框架的代码使用以下约定所有的地方:关于Rails框架的代码问题

class SomeClass 
    class << self 
    def some function 
    end 
    end 
end 

而不是

class SomeClass 
end 

def SomeClass.function 
end 

class SomeClass 
    def self.somefunction 
    end 
end 

这种设计选择的原因是什么?他们似乎都完成这些同样的事情class << self选择

戴夫托马斯有一个不错的元编程屏幕视频系列,进入这些高级主题。我相信第二集讲述了自我类< <。 Screencasts可以在http://www.pragprog.com/screencasts/v-dtrubyom/the-ruby-object-model-and-metaprogramming

一个优点是,它可以让你轻松定义私有类方法:

class SomeClass 
    class << self 
    def a_public_method 
     "This is a public class method" 
    end 

    private 
    def a_private_method 
     "This is a private class method" 
    end 
    end 
end 

否则,您必须使用private_class_method,即:

class SomeClass 
    def self.a_public_method 
    "This is a public class method" 
    end 

    def self.a_private_method 
    "This will be a private class method" 
    end 
    private_class_method :a_private_method 
end 
+0

不能用其他形式创建类方法吗? – 2010-05-27 23:29:20

+0

不使用Module#private,它只设置随后声明的实例方法的可见性。 – 2010-06-01 01:27:01

它们实际上是不同的。第一个例子中的内部类声明实际上引用了SomeClass的特征类。本征类允许您为类定义特定于实例的行为。因此有些函数方法实际上并不属于类,而是属于类的实例。

至于为什么使用它,我可以看到它是有用的,如果你想扩展现有类的功能而不污染它的方法名称空间。