Rails中的“class << self”是什么意思?
可能重复:
class << self idiom in Ruby
Can someone please explain class << self to me?Rails中的“class << self”是什么意思?
我想知道是什么class << self
声明,模型类是什么意思?那里面的陈述与它之外的陈述有什么不同呢?例如:
class Post < ActiveRecord::Base
class << self
def search(q)
# search from DB
end
end
def search2(qq)
# search from DB
end
end
class << self
是什么意思?
有什么方法search(q)
和search2(qq)
之间的区别是什么?
这是一样的
class Post < ActiveRecord::Base
def self.search(q)
# Class Level Method
# search from DB
end
def search2(qq)
# Instance Level Method
# search from DB
end
end
类方法的类(如邮政)合作,实例方法适用于(如邮政该类的实例。新)
有人喜欢class << self; code; end;
方式,因为它保持在一个不错的块和一个地方的所有一流水平的方法。
有些人则喜欢前缀的每一个法self.
明确地知道这是一个类的方法不是一个实例方法。这是一个风格问题和你如何编码。如果将所有类的方法放在class << self
这样的块中,并且该块足够长,那么class << self
行可能不在编辑器视图中,这使得难以知道您处于类实例块中。另一方面,将每个方法前缀为self.
并将它们与实例方法混合在一起也是一个坏主意,在阅读代码时如何知道所有类方法。
选择您希望为自己的代码库,但如果你在一个开源项目工作,或者你在别人的代码进行合作,利用他们的代码格式规则的成语。
它创建类方法而不是实例方法。这和def self.search(q)
一样。这两种方法将被称为像:
Post.search(q)
Post.new.search(qq)
search2
是一个实例,方法而search
是一个类方法。 class << self
语法使您可以将以下类方法分组。在Ruby中定义类方法有三种方法:
class MyClass
def self.method
# do sth.
end
def MyClass.method2
# do sth.
end
class << self
def method3
# do sth.
end
def another_class_method
# do sth.
end
end
end
在类上调用类方法,而不是在实例上调用类方法。个人喜好你想使用三种成语中的哪一种。没有特别原因,我更喜欢def self.method
。
search2是一个非常差的方法名称。 – 2011-01-10 12:36:13