Mel*_*lon 16 ruby ruby-on-rails ruby-on-rails-3
我想知道class << self语句在模型类中的含义是什么?它内部的陈述与外面的陈述有何不同.例如:
class Post < ActiveRecord::Base
class << self
def search(q)
# search from DB
end
end
def search2(qq)
# search from DB
end
end
Run Code Online (Sandbox Code Playgroud)
什么class << self意思?
方法search(q)和有search2(qq)什么区别?
Adi*_*ghi 27
那是一样的
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
Run Code Online (Sandbox Code Playgroud)
类方法适用于类(例如Post),实例方法适用于该类的实例(例如Post.new)
有些人喜欢这种class << self; code; end;方式,因为它将所有类级别的方法保存在一个很好的块中并放在一个地方.
其他人喜欢为每个方法添加前缀,self.以明确地知道这是一个类方法而不是实例方法.这是一个风格和你如何编码的问题.如果将所有类方法放在一个块中class << self,并且此块足够长,则该class << self行可能不在编辑器视图中,这使得很难知道您在类实例块中.
另一方面,为每个方法添加前缀self.并将它们与实例方法混合也是一个坏主意,在读取代码时如何知道所有类方法.
选择一个您喜欢自己的代码库的成语,但如果您在开源项目上工作或者在其他人的代码上进行协作,请使用他们的代码格式规则.
| 归档时间: |
|
| 查看次数: |
8591 次 |
| 最近记录: |