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

Scala正则匹配HH:mm格式返回Any类型及打印异常问题求解

问题根因
  • 类型推断异常:你将参数校验退出逻辑放在了if分支的返回位置,dbutils.notebook.exit的返回类型为Unit,而else分支返回类型为Array[String],Scala会取两类的公共父类型Any作为整个表达式的返回值类型,因此scheduleHours实际类型为Any而非你预期的字符串数组,直接打印时会输出JVM对象的默认内存地址标识。
  • 正则表达式规则错误:你写的[0-30]?[0-9]是无效的字符组写法,字符组内[0-30]实际等价于[0123],会错误匹配30:00、39:59这类非法时间。
修复方案

先执行前置校验逻辑,确认参数非空后再赋值,保证整个赋值表达式的返回类型统一为Array[String],同时修正正则规则。

// 先做前置非空校验
if (inputScheduleHours == "") {
  dbutils.notebook.exit(s"ERROR: Missing param value for schedule hours.")
}
val timePattern = """^((?:[01]?[0-9]|2[0-3]):[0-5][0-9])$""".r
val inputScheduleHoursParsed = inputScheduleHours.split(";").map(_.trim)

val scheduleHours = for (e <- inputScheduleHoursParsed) yield e match {
  case timePattern(e) => e
  case _ => dbutils.notebook.exit(s"ERROR: Wrong param value for schedule hours: '${inputScheduleHours}'")
}
验证说明

修改后scheduleHours的类型会被正确推断为Array[String],直接使用println(scheduleHours.mkString("[", ", ", "]"))即可打印数组内容,不会再输出对象内存地址。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:18:01