You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala如何重构字符串转Double代码 满足Scapegoat检查要求

重构后实现代码

首先建议将logger提到类/对象层面,避免每次触发错误时重复生成logger实例:

import scala.util.Try
import org.slf4j.LoggerFactory

private val logger = LoggerFactory.getLogger(getClass.getName)

// 若要和原有方法签名完全兼容(返回Option[java.lang.Double]),使用下面的实现
def strToDouble(valueParam: Option[String]): Option[java.lang.Double] = {
  valueParam.flatMap { value =>
    Try(value.toDouble)
      .fold(
        e => {
          logger.warn("error parsing string to double", e)
          None
        },
        double => Some(Double.box(double))
      )
  }
}

// 若按需求返回Scala原生Option[Double],可以简化为
def strToDouble(valueParam: Option[String]): Option[Double] = {
  valueParam.flatMap { value =>
    Try(value.toDouble)
      .fold(
        e => {
          logger.warn("error parsing string to double", e)
          None
        },
        Some(_)
      )
  }
}

核心改动说明

  • 替换原有map为flatMap:内部转换结果本身就是Option类型,flatMap可以直接将两层Option压扁为一层,不需要额外处理嵌套结构
  • 移除非局部return:原有代码在recover分支的return属于跨闭包的非局部返回,是Scala官方不推荐的写法,现在通过函数式组合处理错误分支,不需要显式return跳转
  • 移除getOrElse(null):全程使用Option类型处理空值场景,没有null值引入,从根源避免空指针风险,也符合Scapegoat的代码规范要求
  • 保留了错误分支的日志打印逻辑,解析失败时直接返回None,完全满足需求

内容的提问来源于stack exchange,提问作者Tea Curran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 00:42:03