आपके कोड के नमूने का आपके विषय के हिस्से पर, अर्थात प्रतीकों पर विस्तार नहीं हुआ, और इस तरह सवाल का एक हिस्सा अनुत्तरित हो गया।
यदि आपके पास दो तार, फू और बार हैं, और दोनों या तो एक स्ट्रिंग या प्रतीक हो सकते हैं, तो आप समानता का परीक्षण कर सकते हैं
foo.to_s == bar.to_s
यह ज्ञात प्रकार के साथ ऑपरेंड पर स्ट्रिंग रूपांतरणों को छोड़ने के लिए थोड़ा अधिक कुशल है। तो अगर फू हमेशा एक स्ट्रिंग है
foo == bar.to_s
लेकिन फोन करने वाले की ओर से किसी भी अतिरिक्त काम की मांग करने के लिए दक्षता लाभ लगभग निश्चित रूप से लायक नहीं है।
रूबी 2.2 से पहले, तुलना (स्ट्रिंग्स या प्रतीकों के साथ) के उद्देश्य के लिए अनियंत्रित इनपुट स्ट्रिंग्स को नजरअंदाज करने से बचें, क्योंकि प्रतीक कचरा एकत्र नहीं हैं, और इसलिए आप संसाधन थकावट के माध्यम से सेवा से इनकार करने के लिए खुद को खोल सकते हैं। आपके द्वारा नियंत्रित किए गए मानों, अर्थात आपके कोड में शाब्दिक, और विश्वसनीय कॉन्फ़िगरेशन गुणों के लिए प्रतीकों का उपयोग सीमित करें।
रूबी 2.2 ने प्रतीकों का कचरा संग्रह पेश किया ।
foo.intern == bar.internबेहतर होगा - एक प्रतीक से एक स्ट्रिंग बनाने की तुलना में एक स्ट्रिंग इंटर्निंग औसत पर अधिक कुशल है। (यदि किसी दिए गए तार को पहले से नजरबंद कर दिया गया है, तो यह सिर्फ प्रतीक लौटाता है।)