我在Scala中创建了一个简单的代码,用于检查输入是否被正确格式化为HH:mm。我期望代码产生一个有效字符串的数组。然而,我得到的结果是类型Any = Array()
,这是有问题的,因为当我试图打印该结果时,我得到了这样的东西:[Ljava.lang.Object;@32a59591
.
我想这是一个简单的问题,但作为一个Scala新手,我没有设法解决它,即使经过几个小时的谷歌和试用&错误。
val scheduleHours = if (inputScheduleHours == "") {
dbutils.notebook.exit(s"ERROR: Missing param value for schedule hours.")
}
else {
val timePattern = """^((?:[0-30]?[0-9]|2[0-3]):[0-5][0-9])$""".r
val inputScheduleHoursParsed = inputScheduleHours.split(";").map(_.trim)
for (e <- inputScheduleHoursParsed) yield e match {
case timePattern(e) => e.toString
case _ => dbutils.notebook.exit(s"ERROR: Wrong param value for schedule hours: '${inputScheduleHours}'")
}
}
问题是一些分支返回您想要的结果,而其他分支返回dbutils.notebook.exit
(我认为)返回Unit
。Scala必须为结果选择一种同时兼容Unit
和Array[String]
的类型,Any
是唯一适合的类型。
一个解决方案是在调用dbutils.notebook.exit
之后添加一个兼容的值,例如
val scheduleHours = if (inputScheduleHours == "") {
dbutils.notebook.exit(s"ERROR: Missing param value for schedule hours.")
Array.empty[String]
}
然后所有的分支返回Array[String]
,这将是结果的类型。