Ich beziehe mich auf diesen Test in about_symbols.rb in Ruby Koans https://github.com/edgecase/ruby_koans/blob/master/src/about_symbols.rb#L26
def test_method_names_become_symbols
symbols_as_strings = Symbol.all_symbols.map { |x| x.to_s }
assert_equal true, symbols_as_strings.include?("test_method_names_become_symbols")
end
# THINK ABOUT IT:
#
# Why do we convert the list of symbols to strings and then compare
# against the string value rather than against symbols?
Warum genau müssen wir diese Liste zuerst in Zeichenfolgen konvertieren?
Symbol.all_symbols
einer Variablen zuzuweisen und dann auf Aufnahme zu testen. Symbole sind im Vergleich schneller und Sie vermeiden, Tausende von Symbolen in Zeichenfolgen umzuwandeln.include?
Wenn wir angeben:test_method_names_become_symbols
, müssten wir nicht alle diese Symbole in Zeichenfolgen konvertieren.:test_method_names_become_symbols
im Vergleich erzeugt wird, wird der Vergleich immer wahr sein. Durch Konvertierenall_symbols
in Zeichenfolgen und Vergleichen von Zeichenfolgen können wir unterscheiden, ob das Symbol vor dem Vergleich vorhanden war.Denn wenn Sie dies tun:
Es kann (abhängig von Ihrer Ruby-Implementierung) automatisch wahr sein, da
:test_method_names_become_symbols
das Symbol erstellt wird. Siehe diesen Fehlerbericht .quelle
Beide Antworten oben sind richtig, aber angesichts der obigen Frage von Karthik dachte ich, ich würde einen Test veröffentlichen, der zeigt, wie man ein Symbol genau an die
include
Methode übergeben kannEin zusätzlicher Hinweis zu den Koans: Verwenden Sie
puts
Anweisungen sowie benutzerdefinierte Tests, wenn Sie nichts verstehen. Zum Beispiel, wenn Sie sehen:und keine Ahnung haben, was sein
words
könnte, fügen Sie die Zeile hinzuund führen Sie
rake
die Befehlszeile aus. Ebenso können Tests wie der oben hinzugefügte hilfreich sein, um einige der Nuancen von Ruby zu verstehen.quelle