थोड़ा और व्यापक समाधान के लिए,:
यह चमकदार नया रेल 2.3 में है। इस पुनर्रचना के बुनियादी यांत्रिकी कि बजाय ग्राहक कोड में nil
के लिए जाँच की आप के बजाय यह सुनिश्चित करें कि प्रदाता पहली जगह में एक nil
पैदा करता है कभी, एक संदर्भ विशेष अशक्त वस्तु शुरू करने और लौटने कि द्वारा ।
तो, एक खाली स्ट्रिंग, खाली सरणी, एक खाली हैश या एक विशेष खाली ग्राहक या खाली उपयोगकर्ता या केवल nil
के बजाय कुछ वापस लौटें और फिर आपको पहले स्थान पर nil
की जांच करने की आवश्यकता नहीं होगी।
तो, आपके मामले में आप
class NullUser < User
def name
return ''
end
end
की तरह कुछ रूबी में है वहाँ वास्तव में एक और, काफी सुंदर, परिचय अशक्त वस्तु पुनर्रचना को लागू करने के रास्ते होता हालांकि,: आप वास्तव में की जरूरत नहीं है एक शून्य ऑब्जेक्ट प्रस्तुत करें, क्योंकि nil
पहले से ही एक ऑब्जेक्ट है! तो, आप नलयूसर के रूप में व्यवहार करने के लिए बंदर-पैच nil
कर सकते हैं - हालांकि, बंदर-पैचिंग के संबंध में सभी सामान्य चेतावनियां और नुकसान इस मामले में और भी दृढ़ता से लागू होते हैं, क्योंकि nil
चुपचाप NoMethodError
एस निगलते हैं या ऐसा कुछ आपके पूरी तरह से गड़बड़ कर सकता है डीबगिंग अनुभव और वास्तव में उन मामलों को ट्रैक करने के लिए कठिन है जहां nil
है जो वहां नहीं होना चाहिए (nil
के विपरीत जो शून्य ऑब्जेक्ट के रूप में कार्य करता है)।
स्रोत
2009-02-07 06:41:52
मुझे पता था कि यह एक प्रमुख स्लैपर होगा, धन्यवाद। – Jeremy