Kod örneğiniz, konunuzun bir kısmında, yani sembollerde genişlemedi ve bu nedenle sorunun bu kısmı cevapsız kaldı.
İki dizeniz (foo ve bar) varsa ve her ikisi de bir dize veya sembol olabilir, eşitliği şu şekilde test edebilirsiniz:
foo.to_s == bar.to_s
Bilinen türe sahip işlenenler üzerinde dizi dönüşümlerini atlamak biraz daha etkilidir. Yani eğer foo her zaman bir dizeyse
foo == bar.to_s
Ancak verimlilik kazancı, neredeyse kesinlikle, arayan adına herhangi bir ekstra çalışma talep etmeye değmez.
Ruby 2.2'den önce, karşılaştırma amacıyla (dizeler veya sembollerle) kontrolsüz girdi dizgilerini dahil etmekten kaçının, çünkü semboller çöp olarak toplanmaz ve böylece kendinizi kaynakların tükenmesi yoluyla hizmet reddine açabilirsiniz. Sembol kullanımınızı kontrol ettiğiniz değerlerle, yani kodunuzdaki değişmez değerlerle ve güvenilir yapılandırma özellikleriyle sınırlayın.
Ruby 2.2 , sembollerin çöp koleksiyonunu tanıttı .
foo.intern == bar.interndaha iyi olurdu - bir dizgeyi incelemek ortalama olarak bir sembolden bir dizi oluşturmaktan daha etkilidir. (Belirli bir dizge daha önce gözaltına alınmışsa, sadece sembolü döndürür.)