Scala中如何用更简洁方式处理多变量条件判断操作
Scala 简化重复取值+判断执行的实现方式
给你几种简洁的写法,能替代你那段重复的代码:
方式一:批量取值后统一处理
如果getMyVarX()方法没有副作用(比如不会修改状态、重复调用结果一致),可以先把所有值收集到列表里,再一次性完成过滤和执行:
// 批量获取所有需要的变量 val vars = List( myObj.getMyVar1(), myObj.getMyVar2(), myObj.getMyVar3(), myObj.getMyVar4() ) // 过滤符合条件的变量,然后执行操作 vars.filter(checkSomething).foreach(dosomething)
方式二:按需取值(适合有副作用/懒加载的场景)
如果getMyVarX()方法调用有开销或者副作用(比如每次调用会触发计算、修改状态),可以先把获取值的函数存起来,遍历的时候再按需调用:
// 定义获取值的函数列表 val getters = List( () => myObj.getMyVar1(), () => myObj.getMyVar2(), () => myObj.getMyVar3(), () => myObj.getMyVar4() ) // 逐个调用取值,判断后执行操作 getters.foreach { getter => val value = getter() if (checkSomething(value)) dosomething(value) }
不推荐的方式:反射
如果你的myObj有大量命名规律的getMyVarX()方法,有人可能会用反射来批量调用,但这种方式会丢失类型安全,还会增加代码复杂度,除非万不得已,不建议使用。
内容的提问来源于stack exchange,提问作者olaf
相关产品推荐
相关产品推荐

