मैं कर रहा हूँ रेती Horstmann के Combinator पार्सर व्यायाम, मैं सबसे अच्छा तरीका तार कि संख्या और तार कि एक मैच बयान में चर का प्रतिनिधित्व प्रतिनिधित्व के बीच अंतर करने के बारे में चिंता:स्काला Combinator पारसर्स - नंबर तार और चर तार के बीच अंतर
def factor: Parser[ExprTree] = (wholeNumber | "(" ~ expr ~ ")" | ident) ^^ {
case a: wholeNumber => Number(a.toInt)
case a: String => Variable(a)
}
दूसरी पंक्ति, "केस ए: पूर्ण नम्बर" कानूनी नहीं है। मैंने एक regexp के बारे में सोचा, लेकिन इसे "मामले" के साथ काम करने के लिए एक रास्ता नहीं मिला है।
उत्कृष्ट! {X (स्ट्रिंग => संख्या (x)} में {संख्या (_। ToInt)} को बदलना पड़ा क्योंकि मुझे "त्रुटि: विस्तारित फ़ंक्शन के लिए अनुपलब्ध पैरामीटर प्रकार" मिला, फिर यह एक आकर्षण की तरह काम करता था। फिर भी उत्सुक है अगर इसे हल करने का केस क्लास तरीका है। –
अच्छा, वास्तव में मामला सिर्फ आंशिक कार्य को परिभाषित करता है। यह आपको इनपुट पर पैटर्न मिलान करने देता है, जो वास्तव में उपयोगी है। मैं इसके बजाय आंशिक कार्यों (मामले) का उपयोग करके आसानी से अपना जवाब लिख सकता था, यह सिर्फ जरूरी नहीं था। :-) (यह ~> और <~) –
को छोड़कर किया गया होगा यदि आपका मतलब पूरे शब्द पर मिलान करना है, तो मुझे लगता है कि जवाब "नहीं है, ऐसा करने का कोई तरीका नहीं है"। जब तक 'wholeNumber' विधि स्ट्रिंग की तुलना में एक अलग घटक प्रकार के साथ एक पार्सर लौटाती है, तो' पहचान 'या यहां तक कि "(" ~> expr <~ ") से अलग करने का कोई तरीका नहीं है। –