2008-09-24 25 views
23

पर्ल 6 के बारे में पढ़ में, मैं देख रहा हूँ एक फीचर करना है, के बारे में आप नहीं रह गया है जहां trumpeted जा रहा है:पर्ल 6 सच्चाई का मूल्यांकन कैसे करता है?

return "0 but true"; 

... लेकिन इसके बजाय कर सकते हैं:

return 0 but True; 

अगर ऐसी बात है , पर्ल 6 में सच्चाई कैसे काम करती है? पर्ल 5 में, यह बहुत आसान था: 0, "", और अनिश्चित झूठे हैं, बाकी सब कुछ सच है।

बूलियन संदर्भ की बात करते समय पर्ल 6 में नियम क्या हैं?

+1

पर्ल 5 में यह एक 'शून्य लेकिन सच' वापसी मान – EvdB

+8

मैं 'के रूप में 0E0' उपयोग आम है तकनीकी प्रश्न में मूल्य "सच्चाई" के उपयोग के लिए आपको एक अपवर्तित कर देगा :) –

+1

@PaulDixon: शब्द रूबी समुदाय में भी प्रयोग किया जाता है। –

उत्तर

3

तो गठबंधन करने के लिए कि मैं क्या हर किसी के जवाब में से सबसे अच्छा होना करने के लिए लगता है:

जब आप बूलियन संदर्भ में एक चर का मूल्यांकन, अपने .true() विधि कहा जाता हो जाता है। किसी ऑब्जेक्ट द्वारा उपयोग की जाने वाली डिफ़ॉल्ट .true() विधि एक पर्ल 5-शैली < 0, "", undef> ऑब्जेक्ट के मान की जांच करती है, लेकिन जब आप "सत्य" या "लेकिन गलत" कहते हैं, तो यह विधि ओवरराइड हो जाती है एक जो मूल्य को नहीं देखता है वह स्थिर रहता है।

कोई भी एक वास्तविक() विधि लिखने योग्य कल्पना कर सकता है, जो कहता है, जब यह अजीब था तो मूल्य भी गलत था और गलत था।

6

को ओ रेली Perl 6 and Parrot Essentials, झूठी है 0, undef, खाली स्ट्रिंग, और मूल्यों के रूप में झूठी चिह्नित किये अनुसार। सच बाकी सब कुछ है।

इसके अलावा, पर्ल 6 दोनों एक आदिम बूलियन प्रकार और यह सच है और झूठी भूमिकाओं है कि किसी भी मूल्य में मिश्रण कर सकते हैं होने से है (ताकि आप एक "0 लेकिन यह सच है" मूल्य या एक "1 लेकिन गलत" के लिए एक हो सकता है उदाहरण, या तत्वों वाली एक झूठी सूची, या एक खाली सूची जो खाली है)।

http://www.mail-archive.com/[email protected]/msg09930.html

+2

वह पुस्तक प्राचीन है और भाषा की वर्तमान स्थिति का प्रतिनिधित्व नहीं करती है। –

11

देखें Synopsis 12: Roles देखें।

नियम समान हैं, लेकिन "लेकिन" 0 की प्रतिलिपि बनाता है और प्रतिलिपि में एक भूमिका लागू करता है जो इसे बूलियन संदर्भ में सत्य साबित करता है।

आप 5.

+1

एर, क्या आपका मतलब "एक बुलियन संदर्भ में सच" नहीं है? – Ovid

15

पर्ल 6 वस्तु एक सवाल पूछने के बजाय अपने मूल्य को देखकर अब सच्चाई का मूल्यांकन करता है पर्ल में अधिभार के साथ एक ही बात कर सकते हैं। मान वस्तु नहीं है। यह कुछ है जो मुझे अन्य ऑब्जेक्ट भाषाओं के बारे में पसंद आया है और पर्ल में प्रसन्नता होगी: मुझे यह तय करना होगा कि वस्तु कैसे प्रतिक्रिया देती है और उसे बदल सकती है। जैसा कि कहा जाता है, आप इसे अधिभार के साथ पर्ल 5 में कर सकते हैं, लेकिन मुझे हमेशा ऐसा लगता है कि मुझे ऐसा करने के बाद अपने हाथ धोना है। :)

यदि आप इसे बदलने के लिए कुछ भी नहीं करते हैं, तो पर्ल 6 पर्ल 5 के समान व्यवहार करता है ताकि आपको कम से कम आश्चर्य हो।

+1

यह रूबी की तुलना में अधिक ऑब्जेक्ट उन्मुख होगा - केवल 'झूठी' और 'शून्य' की सच्चाई की कमी है, और इसके बारे में आप कुछ भी नहीं कर सकते हैं, जब तक कि आप बंदरगाह न करें! 'और' !! foo' करें। –

11

सत्यता परीक्षण किसी ऑब्जेक्ट पर .true विधि को कॉल करता है, इसलिए "मिश्रण" में "मिश्रण" ऑपरेशन $stuff but True बस (अन्य चीजों के साथ) उस विधि को ओवरराइड करता है।

यह S02 में निर्दिष्ट है, आमतौर पर enum प्रकार (जिसमें बूल एक है) S12 में वर्णित हैं।

1

एक झूठा मूल्य जो लगभग हर जगह उपेक्षित हो जाता है "0" है। मैंने हाल ही में इस दर्दनाक खोज को बनाया है कि "0" झूठी PERL 5 में है। एक गैर-खाली स्ट्रिंग जो झूठी है। मैं वास्तव में उम्मीद कर रहा था कि PERL6 में बदल जाएगा, लेकिन मुझे नहीं लगता।

> if ("0") { say "True" } else { say "False" } 
False 

|| = मुहावरा कुछ तार मैं वास्तव में उम्मीद नहीं थी clobbered:

$ perl -e '$x = "0"; $x ||= ""; print ">>$x<<\n";' 
>><< 
+0

यही कारण है कि [परिभाषित-या] (http://perltraining.com.au/tips/2008-03-03.html) '//' बहुत अच्छा है। यह '5.010' का उपयोग करके सक्षम है (पर्ल 5.10 में शुरू)। –

+0

ओह, मुझे बस याद आया कि परिभाषित होने के बाद से या पिछले वाक्यविन्यास के साथ संघर्ष नहीं किया गया है, यह डिफ़ॉल्ट रूप से सक्षम है। –

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