klasswird häufig verwendet, um eine Variable zu benennen, die ein ClassObjekt enthält (denken Sie daran, dass Klassen auch Objekte sind), wie in klass = String. Können Sie die Quelle, an der Sie sie gesehen haben, für eine tiefere Erklärung angeben?
Chubas
5
Nein, ich möchte keine einzige Quelle bereitstellen, weil ich nicht möchte, dass dies so erklärt wird. Ich möchte ein größeres Bild davon
thenengah
5
Manchmal verwenden die Leute clazzeher als klass(zum Beispiel im Buch "Metaprogramming Ruby").
Andrew Grimm
2
In TV Tropes würde dies als "Xtreme Kool Letterz" bezeichnet (kein Link - nicht produktivitätssicher).
Andrew Grimm
Antworten:
188
classist ein Schlüsselwort zum Definieren einer neuen Klasse. Da es sich um ein reserviertes Schlüsselwort handelt, können Sie es nicht als Variablennamen verwenden. Sie können keines von Rubys Schlüsselwörtern als Variablennamen verwenden, daher können Sie keine Variablen mit dem Namen defoder moduleoder ifoder endusw. verwenden - das classist nicht anders.
Betrachten Sie beispielsweise Folgendes:
def show_methods(class)
puts Object.const_get(class).methods.inspect
end
show_methods "Kernel"
Der Versuch, dies auszuführen, führt zu einem Fehler, da Sie ihn nicht classals Variablennamen verwenden können.
Um dies zu beheben, verwenden wir klassstattdessen den Bezeichner . Es ist nichts Besonderes, wird aber üblicherweise als Variablenname verwendet, wenn Sie mit einer Klasse oder einem Klassennamen arbeiten. Es ist phonetisch dasselbe, aber da es kein reserviertes Schlüsselwort ist, hat Ruby keine Probleme damit.
def show_methods(klass)
puts Object.const_get(klass).methods.inspect
end
show_methods "Kernel"
Sie können dort einen beliebigen (nicht reservierten) Variablennamen verwenden, der jedoch von der Community verwendet wurde klass. Es hat keine besondere Magie - es bedeutet nur "Ich wollte hier den Namen 'Klasse' verwenden, aber ich kann nicht, da es ein reserviertes Schlüsselwort ist".
Nebenbei bemerkt, da Sie es einige Male falsch geschrieben haben, ist es erwähnenswert, dass in Ruby der Fall wichtig ist. Token, die mit einem Großbuchstaben beginnen, sind Konstanten. Über die Spitzhacke :
Ein konstanter Name beginnt mit einem Großbuchstaben, gefolgt von Namenszeichen. Klassennamen und Modulnamen sind Konstanten und folgen den Konstanten-Namenskonventionen. Konventionelle Variablen werden normalerweise durchgehend mit Großbuchstaben und Unterstrichen geschrieben.
Somit ist die korrekte Schreibweise classund klassstatt Classund Klass. Letztere wären Konstanten und beide Classund Klasssind gültige Konstantennamen, aber ich würde aus Gründen der Klarheit empfehlen, sie nicht zu verwenden.
Ich denke, dass die Verwendung klassals lokale Variable von der Spitzhacke stammt - sie haben diesen Namen in einigen Beispielen verwendet, genau aus den Gründen, die Sie hier beschrieben haben.
Ken Bloom
Dies muss alte Ruby-Version anwenden. Mit Ruby 1.9.3 benutze ichobject_instance.class.name == 'Object'
Augustin Riedinger
Nein, es ist immer noch genau. Die Klasse von Object.new ist Object, aber die Klasse von Object ist Class.
Chris Heald
22
klassist auch eine Rails- Methode (oder besser ActiveRecord- Methode) . Es wird verwendet, um die Klasse eines Vereins zu erhalten.
Wie im verlinkten Inhalt angegeben:
classAuthor<ActiveRecord::Base
has_many :books
endAuthor.reflect_on_association(:books).klass
# => Book
Einer ist der Name einer Klasse und der andere ist standardmäßig nur eine undefinierte Konstante. Und für das Paar, das Sie eher sehen, classund klassdas erstere ist ein Schlüsselwort zum Definieren von Klassen, während das letztere nur ein Bezeichner ist (wie jede andere Zeichenfolge). Es wird verwendet, wenn Sie das Wort "Klasse" schreiben möchten, dies jedoch nicht können, da es sich um ein reserviertes Schlüsselwort handelt.
Was ist der Punkt, ich meine, warum / wie es verwendet wird, wofür wird es normalerweise verwendet?
Thenengah
3
Die @ Sam-Klasse ist ein reserviertes Schlüsselwort zum Definieren von Klassen. Wenn Sie sich also mit einer generischen Klasse befassen möchten (z. B. Metaprogrammierung), können Sie nicht schreiben class = Kernel.const_get(class_name). Aber Sie können schreiben klass = Kernel.const_get(class_name), und das wird verwendet, um "Klasse" darzustellen.
Thiago Silveira
2
Der Punkt ist, dass Sie das Schlüsselwort "Klasse" nicht für "Klasse" verwenden können ... da es sich um ein reserviertes Wort handelt (zirkuläre Logik, ich weiß), wird stattdessen das Wort "klass" ersetzt. Dies ist eine gängige Redewendung in vielen anderen Sprachen, z. B. Java und C #.
Scott
Sie können also dynamisch Klassen zuweisen? Klass = object.class; Klass.new - so etwas
thenengah
3
@Sam: Dies Klasszu verwenden wäre eine schlechte Wahl, da Bezeichner, die mit Großbuchstaben beginnen, Konstanten sind, sodass Sie sie nur einmal festlegen können. Aber ja, das ist die allgemeine Idee.
klass
wird häufig verwendet, um eine Variable zu benennen, die einClass
Objekt enthält (denken Sie daran, dass Klassen auch Objekte sind), wie inklass = String
. Können Sie die Quelle, an der Sie sie gesehen haben, für eine tiefere Erklärung angeben?clazz
eher alsklass
(zum Beispiel im Buch "Metaprogramming Ruby").Antworten:
class
ist ein Schlüsselwort zum Definieren einer neuen Klasse. Da es sich um ein reserviertes Schlüsselwort handelt, können Sie es nicht als Variablennamen verwenden. Sie können keines von Rubys Schlüsselwörtern als Variablennamen verwenden, daher können Sie keine Variablen mit dem Namendef
odermodule
oderif
oderend
usw. verwenden - dasclass
ist nicht anders.Betrachten Sie beispielsweise Folgendes:
Der Versuch, dies auszuführen, führt zu einem Fehler, da Sie ihn nicht
class
als Variablennamen verwenden können.Um dies zu beheben, verwenden wir
klass
stattdessen den Bezeichner . Es ist nichts Besonderes, wird aber üblicherweise als Variablenname verwendet, wenn Sie mit einer Klasse oder einem Klassennamen arbeiten. Es ist phonetisch dasselbe, aber da es kein reserviertes Schlüsselwort ist, hat Ruby keine Probleme damit.Die Ausgabe ist wie erwartet
Sie können dort einen beliebigen (nicht reservierten) Variablennamen verwenden, der jedoch von der Community verwendet wurde
klass
. Es hat keine besondere Magie - es bedeutet nur "Ich wollte hier den Namen 'Klasse' verwenden, aber ich kann nicht, da es ein reserviertes Schlüsselwort ist".Nebenbei bemerkt, da Sie es einige Male falsch geschrieben haben, ist es erwähnenswert, dass in Ruby der Fall wichtig ist. Token, die mit einem Großbuchstaben beginnen, sind Konstanten. Über die Spitzhacke :
Somit ist die korrekte Schreibweise
class
undklass
stattClass
undKlass
. Letztere wären Konstanten und beideClass
undKlass
sind gültige Konstantennamen, aber ich würde aus Gründen der Klarheit empfehlen, sie nicht zu verwenden.quelle
Class
ein gültiger konstanter Name, sondern auch ein noch vorhandener! (Es ist die Klassenklasse)klass
als lokale Variable von der Spitzhacke stammt - sie haben diesen Namen in einigen Beispielen verwendet, genau aus den Gründen, die Sie hier beschrieben haben.object_instance.class.name == 'Object'
klass
ist auch eine Rails- Methode (oder besser ActiveRecord- Methode) . Es wird verwendet, um die Klasse eines Vereins zu erhalten.Wie im verlinkten Inhalt angegeben:
quelle
klass
undclazz
undclasz
und dergleichen sind kreative Rechtschreibfehler, die verwendet werden, um ein reserviertes Wort zu umgehenclass
.Es wäre weit weniger auf den Augen Erschütterungen zu verwenden
class1
odercl
oderclassX
oder etwas eher als eine vorsätzliche falsche Schreibweise.quelle
Einer ist der Name einer Klasse und der andere ist standardmäßig nur eine undefinierte Konstante. Und für das Paar, das Sie eher sehen,
class
undklass
das erstere ist ein Schlüsselwort zum Definieren von Klassen, während das letztere nur ein Bezeichner ist (wie jede andere Zeichenfolge). Es wird verwendet, wenn Sie das Wort "Klasse" schreiben möchten, dies jedoch nicht können, da es sich um ein reserviertes Schlüsselwort handelt.quelle
class = Kernel.const_get(class_name)
. Aber Sie können schreibenklass = Kernel.const_get(class_name)
, und das wird verwendet, um "Klasse" darzustellen.Klass
zu verwenden wäre eine schlechte Wahl, da Bezeichner, die mit Großbuchstaben beginnen, Konstanten sind, sodass Sie sie nur einmal festlegen können. Aber ja, das ist die allgemeine Idee.