2011-07-19 11 views
5

निम्नलिखित कोडप्रतिमान मिलान

val x = 5 
val y = 4 match { 
    case x => true 
    case _ => false 
} 

मूल्य y सच है में। स्कैला x को स्केल में उसी नाम के साथ परिवर्तनीय को बाध्य करने के बजाय पैटर्न मिलान में एक नि: शुल्क चर होने के लिए व्याख्या करता है।

इस समस्या को हल करने के लिए कैसे करें?

val x = 5 
val y = 4 match { case `x` => true; case _ => false } 

रिटर्न false:

+3

यदि आप एक मौजूदा सवाल क्यों नकल की थी और फिर इसे अपने आप को जवाब? http://stackoverflow.com/questions/6172557/problem-with-scala-matching-scope http://stackoverflow.com/questions/5153590/why-does-scala-complain-when-given- यह- पैटर्न-मिलान-पर-एक-अभिन्न-मूल्य – dhg

+0

@ डीएचजी: मुझे SO पर यह प्रश्न नहीं मिला, यही कारण है कि। मैं अपने स्वयं के प्रश्न का उत्तर देता हूं क्योंकि मैं अपने छोटे छिपे हुए ब्लॉग पर एक नोट लेने या मानसिक पोस्ट करने के बजाय एसओ का उपयोग ज्ञान भंडार के रूप में करना पसंद करता हूं। लिंक के लिए धन्यवाद, मैं डुप्लिकेट के साथ बंद करने के साथ सहमत हूं। – ron

उत्तर

7

कम से कम विस्मय सिद्धांत लागू, मैं बस करना होगा:

val x = 5 
val y = 4 match { 
    case z if z == x => true 
    case _ => false 
} 
+0

रॉन उत्तर अच्छा है, आप एक शर्त जोड़ते हैं जो पैटर्न सीधे मिलान हो सकता है । (डाउनवोट) – Nicolas

+0

मुझे लगता है कि स्थिति उतनी तेज है, और कम से कम आश्चर्यजनक सिद्धांत याद रखें। (upvote) – Anonymous

+0

आपको उस सिद्धांत के साथ एक बिंदु मिला है। – ron

12

चर Backticking एक scoped चर बाध्य करने के लिए इंगित करता है।

वैकल्पिक रूप से, यदि एक चर चरमपंथी अक्षर से शुरू होता है, तो यह बैकटिंग के बिना स्कॉप्ड चर से बांधता है।

+0

यह भी देखें http://scala-programming-language.1934581.n4.nabble.com/scala-pattern-matching-proposal-td1999364.html – ron

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