我有一个昂贵的case语句,它需要命中数据库以确定一个完整匹配。如果有匹配,从上述调用的结果必须被用来进行进一步的操作:从Scala模式匹配中的昂贵语句别名对象
def intent = {
case request @ GET(Path(Seg(database :: Nil))) if recordsFrom(database) != Nil =>
renderOutput(recordsFrom(database))
case ...
}
我想打电话给recordsFrom(database)
只有一次。在上面的例子中,它被调用两次。似乎我应该可以在陈述中应用一些别名?
当数据库不包含记录时,这将导致匹配。对于这个人为的例子来说也许很好,但是对于产生的部分函数会产生非常不同的行为。 –
那又如何?您可以根据您的请求进行匹配,使用数据库检索记录列表,然后测试以查看列表是否为空,您可以在if语句中处理这两种情况。模式匹配很酷,但它不是每个问题的答案。 – vptheron