String
s und Symbol
s in Ruby ist nie direkt gleich. Der Unterschied in der Klasse ist wichtig, in mehr als einer Weise, und
:my_label != "my_label"
jedoch
:my_label.to_s == "my_label"
Ein Ruby Symbol
ist effizienter als ein String
in ein paar Möglichkeiten, einschließlich:
A Symbol
Hashes und vergleicht schneller, was bei der Verwendung als Hash-Schlüssel hilft.
Mehrere Verwendungen der gleichen Symbol
machen keine Kopien der internen Daten, sondern sind nur identische Zeiger auf das gleiche Objekt im Speicher. Dies macht sie speichereffizient, wenn Sie viel mit dem gleichen Wert haben.
Wenn eine Bibliothek, wie Selenium::WebDriver
Verwendung eines Symbol als Parameter macht, dann kann man nicht immer ersetzen Sie es mit einem äquivalenten String. Ob Sie es so behandeln können, hängt von der jeweiligen Bibliothek ab. Es ist relativ einfach zu Symbol
s zu String
s und umgekehrt umzuwandeln, so dass viele Bibliotheken diese Besetzung für Sie tun werden. Es ist sehr üblich, Bibliothekscode zu haben, der param = param.to_s
tut, wenn er einen String
Parameter benötigt.Umwandlung beliebige String
Werte in äquivalent Symbol
diejenigen, war ein Weg, um Speicherlecks (und ein -
String
-Symbol
Casting weniger häufig in der Bibliothek Code, weil für einen langen und Ruby nicht Garbage sammeln unreferenced Symbol
Objekte gefunden Vektor für einen Angreifer, um Ihr Programm zu stürzen).
Einige Bibliotheken bemühen sich beide zu akzeptieren, aber ja, es ist überhaupt nicht automatisch. Rails verwöhnt Leute :) –
'4' ist nicht das selbe wie' 4.0' ist nicht das selbe wie '' 4'' ist nicht dasselbe wie ':" 4 "' ist nicht dasselbe wie '[4]' nicht das Gleiche wie ... – Phrogz