我正在尝试(如果可能的话)获取Scala匹配/ case语句来为我执行内联正则表达式匹配。
具体来说,我有一个运行match
的方法,如果方法的输入以字符串“fizz”开头,那么我希望match语句选择正确的大小写:
def animalToSound(animal : String) : String = {
animal match {
case "duck" => "quack"
case "lion" => "roar"
case "dog" => "woof"
case matchesFizzRegex(animal) => "heyo!"
case _ => "meow"
}
}
def matchesFizzRegex(animal : String) : ??? = {
val fizzRegex = "fizz*".r
if(fizzRegex.match(animal)) {
???
} else {
???
}
}
因此,如果我致电animalToSound("fizzBuzz")
,那么所需的行为是:
我有什么想法可以让它正常工作?
答案 0 :(得分:9)
简单直接
使用字符串
的pattern matching guards
和matches
方法
def animalToSound(animal : String) : String = animal match {
case "duck" => "quack"
case "lion" => "roar"
case "dog" => "woof"
case x if x matches "fizz.*" => "heyo!"
case _ => "meow"
}
答案 1 :(得分:3)
您可以在其他情况下匹配正则表达式:
val reg = "fizz.*".r
animal match {
case "duck" => "quack"
case "lion" => "roar"
case "dog" => "woof"
case `reg` => "heyo!"
case _ => "meow"
}