In Ruby, angenommen, ich habe eine Klasse Foo
, damit ich meine große Sammlung von Foos katalogisieren kann. Es ist ein Grundgesetz der Natur, die alle Foos sind grün und sphärisch, so habe ich Klassenmethoden wie folgt definiert:Delegieren von Instanzmethoden an die Klassenmethode
class Foo
def self.colour
"green"
end
def self.is_spherical?
true
end
end
Das bin ich
Foo.colour # "green"
aber nicht
my_foo = Foo.new
my_foo.colour # Error!
lets do trotz der Tatsache, dass my_foo
ist einfach grün.
Offensichtlich könnte ich eine Instanz Methode colour
definieren, die self.class.colour
aufruft, aber das wird unhandlich, wenn ich viele solche grundlegenden Eigenschaften habe.
Ich kann es vermutlich auch tun, indem ich method_missing
definiere, um die Klasse für irgendwelche fehlenden Methoden zu versuchen, aber ich bin unklar, ob das etwas ist, was ich tun sollte oder ein hässlicher Hack oder wie man es sicher macht (besonders als ich bin eigentlich unter ActiveRecord in Rails, was ich unter Clever Fun Stuff mit method_missing verstehe.
Was würden Sie empfehlen?
Ohne den colo (u) r des Bikesheds debattieren zu wollen, kann es eine gute Idee sein, amerikanisches Englisch im Code anstatt Commonwealth English zu verwenden. –
Dies ist mein eigener persönlicher Code; die einzigen Leute, die es jemals sehen werden, sind ich und ein paar Freunde auch aus Großbritannien. Ich benutze American in Workplace-Code, wenn Hausstil es vorschreibt - ich werde es nicht in meinem eigenen verwenden. – Chowlett
@Chowlett, das ist definitiv Ihre Wahl. Aber du wirst sie immer noch mischen, z.B. wenn Sie auf Ihre '@ colour' in einer' initialize' Methode zugreifen. – ecoologic