2015-11-20 11 views
6

नेस्टेड अगर-स्टेटमेंट से बचने और पठनीयता में सुधार करने के लिए, मैं कोल्डफ्यूजन में switch(true){ ... } कथन बनाना चाहता था। मैं php में अक्सर इस प्रयोग किया जाता है, लेकिन जब मैं Coldfusion में इस कोशिश, मैं प्रारंभ में निम्नलिखित त्रुटि मिलती है:ठंडेपन में गतिशील मामलों के साथ स्विच (सच)?

खाका त्रुटि

यह अभिव्यक्ति एक निरंतर मान होना चाहिए।

यह तब होता है जब एक स्विच मामले इसकी हालत में एक चर का उपयोग करता है, जैसे:

//this example throws the error 
switch(true){ 
    case foo == 1: 
     writeOutput('foo is 1'); 
    break; 
} 

एक स्विच निरंतर मूल्यों के साथ (सही) {...} बयान का उपयोग करना (के रूप में त्रुटि बताते हैं) करता है कार्य:

//this example doesn't throw the error 
switch(true){ 
    case 1 == 1: 
     writeOutput('1 is 1'); 
    break; 
} 

क्या कोल्डफ्यूजन में काम करने के लिए पहला बयान पाने का कोई तरीका है? शायद परिवर्तनीय या कुछ चाल के मूल्यांकन के साथ, या यह कोल्डफ्यूजन में कोई निश्चित नहीं है?

+0

नहीं। जब तक उन्होंने CF11 में व्यवहार नहीं बदला है, तो यह निरंतर होना चाहिए या [इस तरह से लिखा गया है कि यह निरंतर नियम के अनुरूप है] (http://stackoverflow.com/questions/31910902/coldfusion-cfscript-switch-case- जहां-केस के बीच एक सीमा)। – Leigh

उत्तर

2

संक्षेप में: नहीं। केस वैल्यू को कुछ ऐसा होना चाहिए जो को निरंतर मान पर संकलित किया जा सके। 1==1 हो सकता है, क्योंकि यह केवल true है। foo == 1 नहीं हो सकता है, क्योंकि foo केवल रनटाइम पर उपलब्ध है।

मूल रूप से आप जो वर्णन कर रहे हैं वह if/else if/else किसी भी तरह का निर्माण है, इसलिए बस उनमें से एक का उपयोग करें।

+0

इसे लिखकर/अगर अन्यथा इसे थोड़ा गन्दा बनाता है, क्योंकि इसमें कुछ न्यूनतम और अधिकतम मूल्यों के आधार पर व्यवसाय नियमों का एक टन शामिल है, लेकिन मुझे लगता है कि यह एकमात्र तरीका है तो – jan

+0

यह देखने के लायक हो सकता है कि क्या समस्या को पूरा करने के लिए एक अलग तरीका है। यदि आपके पास 500+ मामले हैं (मिगुएल के उत्तर पर आपकी टिप्पणी के अनुसार), तो कोड किसी भी तरह से थोड़ा सुगंधित है। यह संभवतः कुछ ऐसा है जो आप पहले से ही जानते हैं, और अब से निपटने की स्थिति में नहीं हैं, मुझे एहसास है। यह सिर्फ एक अवलोकन है, और स्निपी होने का मतलब नहीं है। –

+0

मुझे 500+ मामलों की आवश्यकता होगी यदि मैं दूसरे उत्तर के उस समाधान का उपयोग करता हूं, जहां 'केस' का वह मान एक निरंतर मान है। मेरे पास वास्तव में 500+ व्यक्तिगत मामले नहीं हैं :-) – jan

2

जैसा कि एडम और लेघ ने इंगित किया था, केस मानों को कुछ स्थिर होना चाहिए। मुझे यकीन नहीं है कि आपका वास्तविक उपयोग केस क्या है लेकिन आप ऐसा कुछ कर सकते हैं:

switch(foo){ 
    case 1: 
     writeOutput('foo is 1'); 
    break; 
    case 2: 
     writeOutput('foo is 2'); 
    break; 
    case 3: 
     writeOutput('foo is 3'); 
    break; 
    case 4: 
    case 5: 
    case 6: 
     writeOutput('foo is 4 or 5 or 6'); 
    break; 
    default: 
     writeOutput("I do not have a case to handle this value: #foo#"); 
} 
+0

मेरे मामले में, यह एक विकल्प नहीं है। मुझे 500+ केस की स्थिति लिखनी होगी – jan

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