2017-06-05 43 views
1

可以将以下两种情况合并为一个case子句,因为它们都执行相同的操作?我可以在scala中组合多个字符串匹配的情况吗?

e match { 
    case "hello" => e + "world" 
    case "hi" => e + "world 
} 

还等什么,如果我想匹配使用startsWith例如,

e match { case e.startsWith("he") | e.startsWith("hi") => ... } 

回答

3

是的,你可以简单地使用or (|)matchpattern之一,

scala> "hi" match { case "hello" | "hi" => println("fantastic") case _ => println("very very bad")} 
fantastic 

scala> "hello" match { case "hello" | "hi" => println("fantastic") case _ => println("very very bad")} 
fantastic 

scala> "something else" match { case "hello" | "hi" => println("fantastic") case _ => println("very very bad")} 
very very bad 

你也可以使用正则表达式进行模式匹配,当匹配的标准很多时特别有用,

scala> val startsWithHiOrHello = """hello.*|hi.*""".r 
startsWithHiOrHello: scala.util.matching.Regex = hello.*|hi.* 

scala> "hi there" match { case startsWithHiOrHello() => println("fantastic") case _ => println("very very bad")} 
fantastic 

scala> "hello there" match { case startsWithHiOrHello() => println("fantastic") case _ => println("very very bad")} 
fantastic 

scala> "non of hi or hello there" match { case startsWithHiOrHello() => println("fantastic") case _ => println("very very bad")} 
very very bad 

参考Scala multiple type pattern matchingScala match case on regex directly

+0

@JRR在这种情况下,正则表达式是更好的主意,而不是'或'。看到更新的例子。你基本上需要'嗨。* | hello。*'正则表达式 – prayagupd

相关问题