可能的重复:
Ruby 中的 class
https://stackoverflow.com/questions/2505067/class-self-idiom-in-ruby有人可以向我解释一下 class https://stackoverflow.com/questions/4149700/can-someone-please-explain-class-self-to-me
我想知道什么是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
mean?
方法之间有什么区别search(q)
and 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
类方法作用于类(例如 Post),实例方法作用于该类的实例(例如 Post.new)
有些人喜欢class << self; code; end;
方式,因为它将所有类级方法保留在一个很好的块中并且在一个地方。
其他人喜欢为每个方法添加前缀self.
明确知道这是一个类方法而不是实例方法。这是风格和编码方式的问题。如果将所有类方法放在一个块中,例如class << self
,并且这个块足够长,class << self
该行可能会超出您的编辑器视图,因此很难知道您是否位于类实例块中。
另一方面,为每个方法添加前缀self.
将它们与实例方法混合也是一个坏主意,您如何在阅读代码时知道所有类方法。
为自己的代码库选择一个您喜欢的习惯用法,但如果您从事开源项目或协作处理其他人的代码,请使用他们的代码格式规则。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)