Unterschied zwischen Voranstellen und Anhängen von Doppelpunkt (: item vs item :)

7

Was ist der Unterschied zwischen dem Anfügen und Voranstellen eines Doppelpunkts in Ruby?

Beispiel:

%Vor%

Warum hat dependent: einen angehängten Doppelpunkt, aber :models und :destroy haben einen vorangestellten Doppelpunkt? Was ist der Unterschied?

    
Automatico 13.08.2013, 18:59
quelle

4 Antworten

9

Dies ist eine neue Syntax in Ruby 1.9 zum Definieren von Symbolen, die Schlüssel in einem Hash sind.

Sowohl die vorangestellten als auch die angehängten : definieren symbol , aber letztere ist nur während der Initialisierung eines Hashes gültig.

Sie können sich ein -Symbol als einfache String-Konstante vorstellen.

Dies entspricht

%Vor%

Vor 1.9 wurden Hashes mit einer Syntax definiert, die etwas verbaler und schwieriger zu tippen ist:

%Vor%

Sie haben es in 1.9 vereinfacht:

%Vor%

Wenn Sie jemals ein Modul schreiben, das Sie vor 1.9 in Ruby verwenden möchten, stellen Sie sicher, dass Sie die ältere Syntax verwenden.

    
akatakritos 13.08.2013, 19:04
quelle
5

Da Ruby Ihnen erlaubt, die Klammern () und in einigen Fällen die geschweiften Klammern {} wegzulassen, ist es vielleicht nicht sehr offensichtlich, aber der obige Code sieht tatsächlich so aus:

has_many(:models, { dependent: :destroy } )

Nun bedeutet das, dass has_many zwei Argumente benötigt, eins ist ein Symbol% ​​co_de%, eine unveränderliche Zeichenfolge und ein Hash, wobei : der Schlüssel und dependent der Wert ist. auch vielleicht als destroy gesehen.

    
PericlesTheo 13.08.2013 19:07
quelle
4

In beiden Fällen zeigt der Doppelpunkt ein Symbol an, aber das Anhängen ist eine Abkürzung, wenn das Symbol ein Schlüssel in einem Hash ist.

%Vor%

ist dasselbe wie

%Vor%     
bgates 13.08.2013 19:04
quelle
2

Der "angehängte" Doppelpunkt ist einfach die neue gebräuchliche Art, Hashes in 1.9 anzuzeigen.

dependent: :destroy ist dasselbe wie :dependent => :destroy

Auf der anderen Seite zeigt ein "vorangestellt" Doppelpunkt einen Symboldatentyp in Ruby an.

    
Nick 13.08.2013 19:07
quelle

Tags und Links