我正在尝试(如果可能的话)获得 Scala 匹配/案例语句来为我执行内联正则表达式匹配。

具体来说,我有一个将运行 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") ,那么所需的行为是:
  • "fizzBu​​zz"等于 "duck"吗?不,请尝试下一个案例。
  • "fizzBu​​zz"等于 "lion"吗?不,请尝试下一个案例。
  • "fizzBu​​zz"等于 "dog"吗?不,请尝试下一个案例。
  • "fizzBu​​zz"是否匹配 fizz 正则表达式(任何以 'fizz' 开头的字符串)?是的,所以返回“嘿!”

  • 有什么想法可以让我正常工作吗?

    最佳答案

    简单明了

    使用字符串的 pattern matching with guardsmatches 方法

    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"
        }
    

    关于regex - 带有内联正则表达式的 Scala 匹配语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39893255/

    10-10 05:30