Scala中如何优化match表达式以避免重复返回0.0?
消除Scala代码中重复返回0.0的方案
可以利用Scala中Option类型的内置方法,把重复的0.0逻辑统一处理,以下是几种常用方案:
方案1:使用filter + getOrElse
这是最简洁的写法,直接过滤符合条件的价格,统一用getOrElse返回默认值:
val price: Option[Double] = ??? val result = price.filter(isPriceFair).getOrElse(0.0)
filter会将不符合isPriceFair的Some(d)转为None,最终所有None场景(包括原始的None和过滤后的None)都会通过getOrElse返回0.0,无需重复编写默认值。
方案2:使用fold方法
fold可以直接处理Option的两种分支,将默认值只声明一次:
val defaultPrice = 0.0 val price: Option[Double] = ??? val result = price.fold(defaultPrice)(d => if (isPriceFair(d)) d else defaultPrice)
第一个参数是None时的返回值,第二个参数是处理Some(d)的逻辑,把默认值抽成变量后,进一步避免了重复代码。
方案3:使用for推导式
如果后续逻辑需要扩展,for推导式的可读性更好,最后统一处理默认值:
val price: Option[Double] = ??? val result = (for { d <- price if isPriceFair(d) } yield d).getOrElse(0.0)
推导式里先提取Option中的值,再过滤符合条件的结果,最后用getOrElse兜底返回0.0。
内容的提问来源于stack exchange,提问作者IUnknown
相关产品推荐
相关产品推荐

