Gibt es einen Unterschied zwischen :key => "value"
(Hashrocket) und key: "value"
(Ruby 1.9) Notationen?
Wenn nicht, möchte ich die key: "value"
Notation verwenden. Gibt es ein Juwel , das mir zu konvertieren von hilft :x =>
zu x:
Notationen?
Ja, da gibt es einen Unterschied. Diese sind legal:
h = { :$in => array }
h = { :'a.b' => 'c' }
h[:s] = 42
aber das sind nicht:
h = { $in: array }
h = { 'a.b': 'c' } # but this is okay in Ruby2.2+
h[s:] = 42
Sie können auch alles als Schlüssel =>
verwenden, um dies zu tun:
h = { C.new => 11 }
h = { 23 => 'pancakes house?' }
aber das kannst du nicht machen:
h = { C.new: 11 }
h = { 23: 'pancakes house?' }
Der JavaScript-Stil ( key: value
) ist nur nützlich, wenn alle Ihre Hash-Schlüssel "einfache" Symbole sind (mehr oder weniger /\A[a-z_]\w*\z/i
passend, AFAIK der Parser verwendet sein Beschriftungsmuster für diese Schlüssel).
Die :$in
Stilsymbole werden bei Verwendung von MongoDB ziemlich häufig angezeigt, sodass Sie bei Verwendung von MongoDB am Ende Hash-Stile mischen. Und wenn Sie jemals mit bestimmten Schlüsseln von Hashes arbeiten (h[:k]
) und nicht nur mit ganzen Hashes ( h = { ... }
) arbeiten, müssen Sie immer noch den Doppelpunktstil für Symbole verwenden. Sie müssen auch den führenden Doppelpunkt für Symbole verwenden, die Sie außerhalb von Hashes verwenden. Ich bevorzuge es, konsistent zu sein, damit ich mich überhaupt nicht mit dem JavaScript-Stil beschäftige.
Einige der Probleme mit dem JavaScript-Stil wurden in Ruby 2.2 behoben. Sie können jetzt Anführungszeichen verwenden, wenn Sie Symbole haben, die keine gültigen Bezeichnungen sind, z. B.:
h = { 'where is': 'pancakes house?', '$set': { a: 11 } }
Aber Sie brauchen immer noch das Hashrocket, wenn Ihre Schlüssel keine Symbole sind.
h = { 'a.b': 'c' }
ist jetzt ab Ruby 2.2.0 legal. Siehe bugs.ruby-lang.org/issues/4276h[:s] = 42
bezieht sich das Beispiel Ihrer Meinung nach auf diese Frage? Meiner Meinung nach ist der JavaScript-Stil im Vergleich zum Hashrocket-Stil nur für die Definition von Hash-Schlüssel / Wert-Paaren relevant und nicht für die Adressierung von Hash-Elementen durch Schlüssel. Daherh[s:] = 42
scheint das Beispiel irreführend zu sein.h[:s] = 42
Notation. Es gibt keine andere Option. Wenn Sie Schlüssel / Wert-Paare definieren, erhalten Sie Optionen für den{ key: value }
JavaScript-Stil oder den{ :key => value }
Hashrocket-Stil. Das Adressierungsszenario scheint immer noch nicht relevant für das zu sein, was im Fokus steht.key: "value"
ist eine praktische Funktion von Ruby 1.9; Solange Sie wissen, dass Ihre Umgebung dies unterstützt, sehe ich keinen Grund, es nicht zu verwenden. Es ist einfach viel einfacher, einen Doppelpunkt als eine Rakete einzugeben, und ich denke, er sieht viel sauberer aus. Es gibt wahrscheinlich ein Juwel für die Konvertierung, aber es scheint eine ideale Lernerfahrung für Sie zu sein, wenn Sie die Dateimanipulation und die regulären Ausdrücke noch nicht kennen.quelle
Von Hash-Raketen zugewiesene Ruby-Hash-Schlüssel können Zeichenfolgen für Schlüssel-Wert-Paare ( z . B.
's' => x
) erleichtern, während die Schlüsselzuweisung über Symbole ( z. B.key: "value"
oder:key => "value"
) nicht mit Zeichenfolgen zugewiesen werden kann. Obwohl Hash-Rockets Freiheit und Funktionalität für Hash-Tabellen bieten und insbesondere Zeichenfolgen als Schlüssel zulassen , kann die Anwendungsleistung langsamer sein, als wenn die Hash-Tabellen mit Symbolen als Hash-Schlüsseln erstellt würden. Die folgenden Ressourcen können möglicherweise Unterschiede zwischen Hashrockets und Symbolen verdeutlichen:quelle
Die
key: value
Zuweisungen im JSON-Stil sind Teil der neuen Ruby 1.9-Hash-Syntax. Beachten Sie daher, dass diese Syntax mit älteren Ruby-Versionen nicht funktioniert. Außerdem werden die Tasten Symbole sein. Wenn Sie mit diesen beiden Einschränkungen leben können, funktionieren neue Hashes genauso wie die alten Hashes. Es gibt keinen Grund (außer vielleicht Stil), sie zu konvertieren.quelle
Tun
:key => value
ist dasselbe wie tunkey: value
und ist wirklich nur eine Annehmlichkeit. Ich habe keine anderen Sprachen gesehen, die das verwenden=>
, aber andere wie Javascript verwenden daskey: value
in ihren Hash-äquivalenten Datentypen.Was ein Juwel betrifft, um die Art und Weise, wie Sie Ihre Hashes geschrieben haben, umzuwandeln, würde ich mich einfach an die Art und Weise halten, wie Sie es für Ihr aktuelles Projekt tun.
* Beachten Sie, dass bei der Verwendung
key: value
des Schlüssels ein Symbol angezeigt wird und der Zugriff auf den an diesem Schlüssel in einemfoo
Hash gespeicherten Wert weiterhin erfolgtfoo[:key]
.quelle
=>
. Ich würde vermuten, dass Ruby, stark von Perl inspiriert, die Syntax von Perl ausgeliehen hat :)