Questo è lo stesso di
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
I metodi di classe lavorano sulla classe (ad esempio Post), metodi di istanza opere su istanze di quella classe (ad esempio postali. nuovo)
Alcune persone amano il modo class << self; code; end;
perché mantiene tutti i metodi di livello di classe in un blocco piacevole e in un unico punto.
Altri preferiscono precedere ciascun metodo con self.
per sapere esplicitamente che è un metodo di classe non un metodo di istanza. È una questione di stile e di codice. Se si mettono tutti i metodi di classe in un blocco come class << self
e questo blocco è abbastanza lungo, la riga class << self
potrebbe essere fuori dalla vista dell'editor rendendo difficile sapere che si è nel blocco di istanze di classe.
D'altra parte, il prefisso di ogni metodo con self.
e il mescolare quelli con i metodi di istanza è anche una cattiva idea, come si conoscono tutti i metodi di classe durante la lettura del codice.
Scegli un idioma che preferisci per il tuo codice personale ma se lavori su un progetto open source o collabori sul codice di qualcun altro, usa la loro regola di formattazione del codice.
fonte
2011-01-10 10:05:10
search2 è un nome di metodo molto scarso. –
E anche un duplicato di [Rails class << self] (http://stackoverflow.com/questions/2567956/rails-class-self) e [Differenza tra "self.method_name" e "class << self" in Ruby ] (http: // StackOverflow.it/questions/2025569/difference-between-self-method-name-and-class-self-in-ruby) e [Qualcuno può spiegare la classe << me stesso?] (http://stackoverflow.com/questions/4149700/can-qualcuno-please-spiegare-class-auto-per-me). Si prega di cercare prima di inviare domande. – Phrogz