/ / क्या यह रूबी खराब अभ्यास में है स्व-निर्मित चर के लिए RARRAY_PTR करने से पहले एक प्रकार की जांच न करने के लिए - माणिक

क्या यह स्वयं निर्मित चर के लिए RARRAY_PTR करने से पहले एक प्रकार की जांच न करने के लिए रूबी खराब अभ्यास में है - सी, रूबी

माणिक के विस्तार में RARRAY_PTR () जो किसी दिए गए माणिक सरणी के लिए एक VALUE * लौटाता है, खतरनाक है, क्योंकि इसमें कोई प्रकार की जाँच नहीं है। उदाहरण के लिए यह संभवत: सेगफॉल्ट होगा:

VALUE a= rb_hash_new();
RARRAY_PTR(a)[999];

मैं कभी-कभी अपने आप को एक सरणी में संग्रहीत करता हुआ पाता हूंउदाहरण चर और बाद में इस उदाहरण चर पर RARRAY_PTR () कर रहा है। यह खतरनाक हो सकता है क्योंकि किसी भी ऑब्जेक्ट उदाहरण चर के साथ छेड़छाड़ करने के तरीके हैं। अगर कोई ऐसा करता है, तो मैं RARRAY_PTR () एक ऐसा काम कर सकता हूं, जो एक सरणी नहीं है।

क्या अन्य उदाहरणों पर भरोसा करना बुरी बात है, जो मेरे उदाहरण चर को नहीं बदल रहे हैं, या क्या यह गलत है अगर रूबी दुभाषिया सेगफॉल्ट्स?

उत्तर:

उत्तर № 1 के लिए 1

मैं इसके बारे में ज्यादा चिंता नहीं करता हूं। अगर कोई आपके उदाहरण चर के साथ गड़बड़ कर रहा है तो वे "जो भी नुकसान पहुंचाते हैं उसके लिए जिम्मेदार हैं।"

अगर कोई उपयोग करता है instance_varible_set एक सरणी से एक शुद्ध रूबी वर्ग में फिक्सनम में एक उदाहरण चर को बदलने के लिए, फिर आप शायद एक के साथ समाप्त होंगे NoMethodError; यदि वे इसे आपके C समर्थित वर्ग के लिए करते हैं, तो उन्हें "segfault मिलेगा।"

मूल रूप से, यदि कोई व्यक्ति किसी वस्तु के इन्टर्नल्स के साथ खिलवाड़ करके खुद को ईंट से मारना चाहता है, तो यह आपकी समस्या नहीं है।