带有内联正则表达式的 Scala 匹配语句
Scala match statements with inline regexes
我正在尝试(如果可能的话)获取 Scala match/case 语句来为我执行内联正则表达式匹配。
具体来说,我有一个方法将 运行 一个 match
,如果方法的输入以字符串 "fizz" 开头,那么我希望匹配语句select 正确的大小写:
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")
,则所需的行为是:
- "fizzBuzz"是否等于"duck"?不。所以尝试下一个案例。
- "fizzBuzz"是否等于"lion"?不。所以尝试下一个案例。
- "fizzBuzz"是否等于"dog"?不。所以尝试下一个案例。
- "fizzBuzz" 是否匹配 fizz 正则表达式(任何以 'fizz' 开头的字符串)?是的,所以 return "heyo!"
有什么办法可以让它正常工作吗?
您可以在其他情况下匹配正则表达式:
val reg = "fizz.*".r
animal match {
case "duck" => "quack"
case "lion" => "roar"
case "dog" => "woof"
case `reg` => "heyo!"
case _ => "meow"
}
简单明了
使用字符串的pattern matching with 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"
}
我正在尝试(如果可能的话)获取 Scala match/case 语句来为我执行内联正则表达式匹配。
具体来说,我有一个方法将 运行 一个 match
,如果方法的输入以字符串 "fizz" 开头,那么我希望匹配语句select 正确的大小写:
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")
,则所需的行为是:
- "fizzBuzz"是否等于"duck"?不。所以尝试下一个案例。
- "fizzBuzz"是否等于"lion"?不。所以尝试下一个案例。
- "fizzBuzz"是否等于"dog"?不。所以尝试下一个案例。
- "fizzBuzz" 是否匹配 fizz 正则表达式(任何以 'fizz' 开头的字符串)?是的,所以 return "heyo!"
有什么办法可以让它正常工作吗?
您可以在其他情况下匹配正则表达式:
val reg = "fizz.*".r
animal match {
case "duck" => "quack"
case "lion" => "roar"
case "dog" => "woof"
case `reg` => "heyo!"
case _ => "meow"
}
简单明了
使用字符串的pattern matching with 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"
}