Ist Hash Rocket veraltet?

99

Der gut zitierte RIP-Hash-Raketenbeitrag scheint zu implizieren, dass die Hash-Rocket-Syntax ( :foo => "bar") zugunsten des neuen Ruby-JSON-Hash ( foo: "bar") veraltet ist , aber ich kann keine endgültige Referenz finden, die die Hash-Raketenform angibt ist ab Ruby 1.9 tatsächlich veraltet / nicht empfohlen.

Mahemoff
quelle
Ich denke, dieser Typ benutzt Ruby nur mit Rails.
Niklas B.
Es lebe die Rakete
HashRocketSyntax
Rakete ist immer noch stark 🚀
Mahemoff

Antworten:

132

Der Autor dieses Blogposts ist zu dramatisch und dumm, das =>ist immer noch ziemlich notwendig . Bestimmtes:

  1. Sie müssen die Rakete für Symbole verwenden, die in Anführungszeichen gesetzt werden müssen: :'where.is' => xist gültig, aber 'where.is': xnicht. Ruby 2.2 hat dieses Problem behoben, so dass Sie 'where.is': xin Ruby 2.2+ sagen können.
  2. Sie müssen die Rakete für Symbole verwenden, die keine gültigen Bezeichnungen sind: :$set => xist gültig, aber $set: xnicht. In Ruby 2.2+ können Sie dieses Problem mit Anführungszeichen umgehen: Sie '$set': xwerden das Richtige tun.
  3. Sie müssen die Rakete verwenden, wenn Sie Schlüssel in Ihren Hashes verwenden, die keine Symbole sind: 's' => xist gültig, aber 's': xetwas völlig anderes.

Sie können das oben Genannte natürlich auf offensichtliche Weise umgehen:

h = { }
h[:'where.is'] = 'pancakes house?'
# etc.

aber das ist nur hässlich und unnötig.

Die Rakete geht nirgendwo hin, ohne Ruby's Hashes zu lähmen.

mu ist zu kurz
quelle
6
s / übermäßig dramatisch und dumm / dramatisch und befürwortend mit einer beredten Hommage /. Der Rest Ihrer Punkte steht.
Dbenhur
15
Sie müssen sich fragen, ob die Verwendung der neuen Syntax, wenn Sie sich in bestimmten Szenarien immer noch auf die alte Syntax verlassen müssen, unseren Code einfach kompliziert.
Dave Rapin
4
@ DaveRapin: Deshalb beschäftige ich mich nicht mit der Nicht-Raketen-Syntax. Ich mache einiges an MongoDB-Arbeit und verwende oft Nicht-Symbole als Hash-Schlüssel (egal was h[:s]ich mache), so dass die Syntax im JavaScript-Stil für mich nur eine sinnlose Komplikation ist. Scheint mir eine schlecht durchdachte Idee zu sein, und jetzt bleiben wir für immer bei ihr und der damit verbundenen Verwirrung.
Mu ist zu kurz
8
@DaveRapin Betrachten a = [0,1,4,9]vs. a = Array.new(4){ |i| i**2 }. Warum erstere verwenden, wenn Sie manchmal letztere verwenden müssen? Antwort: weil es bequemer ist. TIMTOWTDI kompliziert die Sprache, aber dies ist ein Kompromiss. Lua ist im Kern sehr elegant und daher leicht zu erlernen, aber es ist ärgerlich, tatsächlich zu programmieren. Ruby hat viele Sonderfälle und benutzerdefinierte Funktionen, die das Lernen erschweren, aber eine Freude beim Programmieren. Ich jedenfalls begrüße die einfacher zu tippende, leichter zu lesende Hash-mit-Symbolschlüssel-Notation für den allgemeinen Fall.
Phrogz
7
Das Tippen macht zwar weniger Spaß, aber ich bevorzuge definitiv die Hash-Rakete. Warum? weil dies bedeutet, dass ich jedes Mal, wenn ich ein Symbol für einen Schlüssel verwende, irgendwo in meinem Projekt danach suchen kann, indem ich nach einer Zeichenfolge suche, die mit einem Doppelpunkt beginnt. Für mich ist die fehlende Kohärenz zwischen den tatsächlichen Zeichen verwendet , um den Schlüssel in bezeichnen my_hash = {a:1}und myhash[:a] = 1ist, zumindest, eher lästig. Ich bin sicher, dass ich nicht der einzige bin, der so fühlt.
Huliax