Scala 字符串大小写匹配模式的不同行为
我试图在一个case类中使用字符串,比如java switch case语句switchsomeString。但是scala match语句总是解析为第一个块Scala 字符串大小写匹配模式的不同行为,scala,pattern-matching,Scala,Pattern Matching,我试图在一个case类中使用字符串,比如java switch case语句switchsomeString。但是scala match语句总是解析为第一个块 whichTopic match { case accounts ⇒ { logger.info("!!!! ---- FOR ACCOUNTS --- !!! ") } case users ⇒ { logger.info("!!!! ---- FOR USERS --- !!! ") // TOD
whichTopic match {
case accounts ⇒ {
logger.info("!!!! ---- FOR ACCOUNTS --- !!! ")
}
case users ⇒ {
logger.info("!!!! ---- FOR USERS --- !!! ")
// TODO : Handle errors from the consumer
}
}
即使whichTopic值有用户,它也会进入accounts块这是因为您没有正确使用它-您实际做的是将whichTopic变量别名为accounts或users变量,但没有指定它们的特殊性 你应该这样做:
whichTopic match {
case accounts if accounts.startsWith("accounts") => logger.info("!!!! ---- FOR ACCOUNTS --- !!! ")
case users if users.startsWith("users") => logger.info("!!!! ---- FOR USERS --- !!! ")
}
这是一种检查字符串是否以帐户或用户开头的情况
当然,您可以用任何字符串方法替换startsWith,比如contains或其他适合您的情况的方法
啊…所以我从来没有用这个变量来确定它要去哪个块 如果要检查与现有变量的相等性,可以编写
case x if x == accounts => ...
就像Gal Naor的回答或
case `accounts` => ...
case x=>将匹配所有输入,因为x是一个未绑定的变量,可以保存任何匹配的值。案例账户=>是相同的。您正在创建一个名为accounts的变量,它可以保存并匹配任何值。啊…所以我从来没有使用该变量来标识它必须转到哪个块。谢谢你的解释。