1

我正在寻找一种基于函数评估结果而不是 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")
}

任何想法 ?

4

2 回答 2

2

您想使用模式防护:

caller match 
{
  case x if f1(x) => println ("caller said hello")
  case _ => println ("caller did not say hello")
}
于 2013-09-07T16:30:55.843 回答
0

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

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

但是为了Boolean更好地使用 if/else 表达式,这在字节码中会更清晰,并且会更快一些

于 2013-09-08T11:27:39.820 回答