函数上的scala模式匹配

时间:2013-09-07 16:01:02

标签: scala pattern-matching

我正在寻找一种基于函数评估结果而不是val类型进行模式匹配的方法。例如,

def f1(x:String):Boolean = if (x contains ("Helllo")) true else false
val caller="Hello"

caller match 
{
  case f1(caller) => println ("caller said hello")
  case _ => println ("caller did not say hello")
}

任何想法?

2 个答案:

答案 0 :(得分:2)

你想使用图案防护:

caller match 
{
  case x if f1(x) => println ("caller said hello")
  case _ => println ("caller did not say hello")
}

答案 1 :(得分:0)

我宁愿在没有后卫的情况下这样做,那会更快更清洁:

f1(caller) match {
  case true => ....
  case false => ....
}

但是对于Boolean更好地使用if / else表达式,这在字节代码中会更干净并且更快一点