2012-03-19 12 views
27

मैं निम्नलिखित है:स्काला मामले मैच आंशिक स्ट्रिंग

var serv = "chat" 

serv match { 

    case "chat" => Chat_Server ! Relay_Message(serv) 
    case _ => null 

} 

समस्या यह है कि कभी कभी मैं भी सर्व स्ट्रिंग के अंत पर एक अतिरिक्त परम गुजरती हैं, इसलिए है:

var serv = "chat.message" 

है वहाँ एक तरीका है कि मैं स्ट्रिंग के एक हिस्से से मेल खा सकता हूं ताकि यह अभी भी Chat_Server को भेजा जा सके?

धन्यवाद किसी भी मदद के लिए, बहुत सराहना :)

+0

जैसा कि नीचे देखा जा सकता है, समाधान हैं। लेकिन शायद 'सर्वो' एक और अधिक संरचित मूल्य बनना चाहता है न कि सिर्फ एक सरल 'स्ट्रिंग'? –

+2

एक 'केस क्लास' इसके लिए बिल्कुल सही होगा! – Kyle

+4

स्कैला में 'शून्य' का उपयोग टालना चाहिए; इसके बजाय 'विकल्प' का उपयोग करें। 'शून्य' वास्तव में जावा के साथ अंतःक्रियाशीलता के लिए वास्तव में मौजूद है। – Jesper

उत्तर

41

उपयोग regexes;)

val Pattern = "(chat.*)".r 

serv match { 
    case Pattern(chat) => "It's a chat" 
    case _ => "Something else" 
} 

और regexes तुम भी आसानी से विभाजित कर सकते हैं पैरामीटर और आधार तार के साथ:

+०१२३५१६४१०६१
val Pattern = "(chat)(.*)".r 

serv match { 
    case Pattern(chat,param) => "It's a %s with a %s".format(chat,param) 
    case _ => "Something else" 
} 
+2

में तथाकथित * गार्ड * कहा जाता है, पैटनर मिलान में "चैट" चर स्पष्ट रूप से बेकार है, आप इसे 'पैटर्न (_) ' – Nicolas

+1

@ निकोलस हां के साथ प्रतिस्थापित कर सकते हैं, आप सही। मैंने ओम संस्करण 'चैट' में इसका कारण सर्वर पर एक संदेश के रूप में उपयोग नहीं किया है। –

+0

सावधान रहें, आपके समाधान में, 'चैट' वैरिएबल हमेशा मिलान के बराबर होगा' अगर पैटर्न मिलान किया गया है। (यही कारण है कि मैंने लिखा था कि यह बेकार था) – Nicolas

43

एक चर को बाँध मिलान पैटर्न है और एक गार्ड का उपयोग सुनिश्चित करने के लिए चर के साथ शुरू होता "चैट"

// msg is bound with the variable serv 
serv match { 
    case msg if msg.startsWith("chat") => Chat_Server ! Relay_Message(msg) 
    case _ => null 
} 
+2

इसे आपके मामले में पहली स्थिति अभिव्यक्ति –

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