In Ruby, si supponga di avere una classe Foo
per consentirmi di catalogare la mia vasta raccolta di Foos. Si tratta di una legge fondamentale della natura che tutti i Foos sono verdi e sferica, così ho definito metodi di classe come segue:Delegare i metodi di istanza al metodo di classe
class Foo
def self.colour
"green"
end
def self.is_spherical?
true
end
end
Questo mi permette di fare
Foo.colour # "green"
ma non
my_foo = Foo.new
my_foo.colour # Error!
nonostante il fatto che my_foo
sia chiaramente verde.
Ovviamente, potrei definire un metodo di istanza colour
che chiama self.class.colour
, ma che diventa ingombrante se ho molte di queste caratteristiche fondamentali.
Posso anche presumibilmente farlo definendo method_missing
di provare la classe per tutti i metodi mancanti, ma io sono chiaro se questa è una cosa che dovrei fare o un brutto hack, o come farlo in modo sicuro (soprattutto perché In realtà è in ActiveRecord in Rails, che capisco fa alcune cose divertenti intelligenti con method_missing).
Cosa mi consiglia?
Senza voler discutere il colo del bikehed, può essere una buona idea usare l'inglese americano nel codice, piuttosto che il Commonwealth inglese. –
Questo è il mio codice personale; le uniche persone che possano vederlo sono io e alcuni amici anche dalla Gran Bretagna. Userò il codice americano sul posto di lavoro se lo stile di casa lo impone: non lo userò per conto mio. – Chowlett
@Chowlett, questa è sicuramente la tua scelta. Ma li mescolerai ancora, ad es. quando accedi al tuo '@ colore' in un metodo' initialize'. – ecoologic