134 Stimmen

Was ist der Unterschied zwischen Class und Klass in Ruby?

Was ist der Unterschied zwischen Class und Class?

1 Stimmen

Wo haben Sie Letzteres gesehen?

0 Stimmen

Ich habe Klass an mehr als einem Ort gesehen. Kürzlich bei der Suche nach Singles

22 Stimmen

klass wird üblicherweise verwendet, um eine Variable zu benennen, die eine Class Objekt (auch Klassen sind Objekte), wie in klass = String . Können Sie die Quelle angeben, wo Sie es gesehen haben, um eine genauere Erklärung zu erhalten?

216voto

Chris Heald Punkte 59198

class ist ein Schlüsselwort, das zur Definition einer neuen Klasse verwendet wird. Da es ein reserviertes Schlüsselwort ist, können Sie es nicht als Variablennamen verwenden. Sie können keines der Ruby-Schlüsselwörter als Variablennamen verwenden, also können Sie keine Variablen mit dem Namen def o module o if o end , etc - class ist nicht anders.

Denken Sie zum Beispiel an 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 nicht class als Variablenname.

test.rb:1: syntax error, unexpected kCLASS, expecting ')'
    def show_methods(class)
                          ^
test.rb:2: syntax error, unexpected ')'
      puts Object.const_get(class).methods.inspect

Um dies zu beheben, verwenden wir den Bezeichner klass stattdessen. Es ist nichts Besonderes, aber es wird üblicherweise als Variablenname verwendet, wenn es sich um eine Klasse oder einen Klassennamen handelt. Phonetisch ist es 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"

Die Ausgabe ist wie erwartet

["method", "inspect", "name", "public_class_method", "chop!"...

Sie könnten dort jeden (nicht reservierten) Variablennamen verwenden, aber die Gemeinschaft hat sich für die Verwendung von klass . Es hat keine besondere Magie - es bedeutet nur: "Ich wollte den Namen 'class' hier verwenden, aber das geht nicht, da es ein reserviertes Schlüsselwort ist.

Nebenbei bemerkt, da Sie sich ein paar Mal vertippt haben, ist es erwähnenswert, dass in Ruby die Groß- und Kleinschreibung eine Rolle spielt. Token, die mit einem Großbuchstaben beginnen, sind Konstanten. Über die Spitzhacke :

Ein Konstantenname beginnt mit einem Großbuchstaben, gefolgt von Namenszeichen. Klassennamen und Modulnamen sind Konstanten und folgen den Konstanten-Namenskonventionen. Konventionell werden konstante Variablen in der Regel mit Großbuchstaben und Unterstrichen geschrieben.

Die korrekte Schreibweise ist also class y klass statt Class y Klass . Letztere wären Konstanten, und beide Class y Klass sind gültige Konstantennamen, aber ich würde davon abraten, sie aus Gründen der Übersichtlichkeit zu verwenden.

31voto

DazBaldwin Punkte 3671

klass ist auch ein Rails (oder eher ActiveRecord) Methode . Sie wird verwendet, um die Klasse einer Assoziation zu ermitteln.

Wie im verlinkten Inhalt angegeben:

class Author < ActiveRecord::Base
  has_many :books
end

Author.reflect_on_association(:books).klass
# => Book

14voto

Jason S Punkte 178087

klass y clazz y clasz und dergleichen sind kreative Rechtschreibfehler, um ein reserviertes Wort zu umgehen class .

Es wäre für die Augen weitaus weniger störend, wenn man class1 o cl o classX oder etwas anderes als ein absichtlicher Rechtschreibfehler.

5voto

Chuck Punkte 228137

Der eine ist der Name einer Klasse und der andere ist standardmäßig eine undefinierte Konstante. Und für das Paar, das Sie eher sehen werden, class y klass Das erste ist ein Schlüsselwort zur Definition von Klassen, während das zweite nur ein Bezeichner ist (wie jede andere Zeichenfolge). Es wird verwendet, wenn Sie das Wort "class" schreiben möchten, dies aber nicht können, weil es ein reserviertes Schlüsselwort ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X