2010-05-05 15 views
8

के साथ FalseClass TrueClass की तरह व्यवहार करें यह सैद्धांतिक प्रश्न है: क्या TrueClass की तरह कार्य करने के लिए FalseClass व्यवहार को बदलना संभव है? to_s, xor, & को ओवरराइड करना संभव है, | व्यवहार लेकिन यह पर्याप्त नहीं है।मेटा प्रोग्रामिंग

आप टेस्ट प्रेरित पसंद है विकास, अपने साथी के सुझाव का पालन करें:

puts "false is new true!" if false 
puts "never happens" if true 

assert false 

काम नहीं करेगा दावा यह होता? क्या सफलतापूर्वक परीक्षा उत्तीर्ण करना संभव है?

+0

मुझे सी कोड obfuscation के बारे में याद दिलाता है ... http://www.ioccc.org/ – Lucero

+0

मैं वर्षों से एक आवेदन विकसित कर रहा हूं और अब मुझे लगता है कि यह सही काम नहीं कर रहा है, इसलिए मैं इसे सही तरीके से उलटा करना चाहता हूं प्राथमिक तर्क –

+0

आपके परीक्षण पर कोई दावा नहीं है :( – shingara

उत्तर

9

यह संभव नहीं है। इसके बारे में सोचने का एक तरीका यह है कि Object#truthiness? कोई विधि नहीं है जिसे फिर से परिभाषित किया जा सकता है।

रूबी एमआरआई में, truthiness परीक्षण RTEST मैक्रो कुछ भी लेकिन Qfalse और Qnil, दो स्थिरांक false और nil करने के लिए इसी मतलब करने के लिए hardwired है। आपको इसे "सच्चाई" या नहीं परिभाषित करने के लिए इसे बदलना होगा।

2

कम से कम आधिकारिक रूबी कार्यान्वयन में असंभव है, क्योंकि सी भागों (Qtrue और Qfalse) में सत्य और झूठा तर्क गहरा है। जोर देकर काम करना, हालांकि, ओवरराइटिंग जोर से काम करेगा। साथ ही, आप सभी मानों को पार्स करने के लिए ruby2ruby जैसे कुछ का उपयोग कर सकते हैं, लेकिन सच से अभी भी झूठ की तरह व्यवहार नहीं करेगा और ![] जैसे स्टेटमेंट अभी भी सत्य होंगे। यह भी ध्यान रखें कि बयान और समान में सभी अन्य वस्तुएं भी सच होती हैं।

+0

आधिकारिक के साथ रुबी कार्यान्वयन, आप एमआरआई/याएआरवी के बारे में बात कर रहे हैं, है ना? –

+0

हां। मैग्लेव में आप स्मॉलटाक के 'बन' का उपयोग कर सकते हैं। –

संबंधित मुद्दे