Scala中更新Option包裹的字符串值的写法是否为惯用实现
Scala Option更新值的惯用写法说明
你当前实现的if判空写法不属于Scala惯用写法,本质是把命令式语言里手动判空的逻辑套用到了Option类型上,没有发挥Option的类型设计优势,还存在冗余判断的问题:你在else分支调用的map本身就只会在Option为Some时执行传入的更新逻辑,遇到None会直接返回None,前面手动判断isEmpty的操作属于多余逻辑。
针对你需要的「None时走兜底计算、Some时更新内部值」的场景,Scala有两种标准惯用实现:
- 无副作用的纯值转换场景优先用
fold,逻辑聚合度最高,不需要手动拆箱判断:
// 第一个参数块对应None时的计算逻辑,第二个参数块对应Some时的值更新逻辑 x.fold( ...another calculation )( val => ...update val )
- 如果分支内包含副作用逻辑,可以用模式匹配实现,可读性更强:
x match { case None => ...another calculation case Some(val) => ...update val }
补充说明:不推荐在Scala中对Option手动做
isEmpty判断后再分支处理,这种写法很容易在后续迭代中因为分支逻辑变复杂出现漏处理、重复调用Option方法的问题,用Option自带的高阶函数或者模式匹配才是类型安全、符合函数式设计习惯的写法。
内容的提问来源于stack exchange,提问作者Mandroid
相关产品推荐
相关产品推荐

