我正在尝试在诸如java switch-case语句switch(someString)
之类的case类中使用字符串。但是scala match
语句始终解析为第一个块。
whichTopic match {
case accounts ⇒ {
logger.info("!!!! ---- FOR ACCOUNTS --- !!! ")
}
case users ⇒ {
logger.info("!!!! ---- FOR USERS --- !!! ")
// TODO : Handle errors from the consumer
}
}
即使whichTopic
的值具有users
,它也会进入accounts
块
答案 0 :(得分:3)
这是因为您没有正确使用它-实际上您是将whichTopic
变量“别名”为accounts
或users
变量的2种情况,但未指定什么是关于他们的“特殊”。
您应该执行以下操作:
whichTopic match {
case accounts if accounts.startsWith("accounts") => logger.info("!!!! ---- FOR ACCOUNTS --- !!! ")
case users if users.startsWith("users") => logger.info("!!!! ---- FOR USERS --- !!! ")
}
这是一种检查字符串是否以accounts
或users
开头的情况。
当然,您可以将startsWith
替换为所需的任何字符串方法,例如contains
或其他适合您情况的东西。
答案 1 :(得分:3)
啊...所以我从不使用变量来确定它必须去哪个块。
如果要检查与现有变量的相等性,可以编写
case x if x == accounts => ...
(如Gal Naor的回答)或
case `accounts` => ...