我正在尝试从 Scala 中的类型中获取字符串Set。但是,无论我尝试什么,它都会Unit作为返回类型而不是string.
if (!validationMessages.isEmpty) {
dataTuple = (parsedJson.toString(), for (s <- validationMessages.toString()){
s.toString()
})
println(dataTuple)
}
else {
dataTuple = (parsedJson.toString(), "some string...")
}
Run Code Online (Sandbox Code Playgroud)
基本上,我试图返回一个像(String, String). 我缺少什么?
块的值是块中最后一个表达式的值。在这种情况下,该if部分的值为
println(dataTuple)
Run Code Online (Sandbox Code Playgroud)
该零件的价值else是
dataTuple = (parsedJson.toString(), "some string...")
Run Code Online (Sandbox Code Playgroud)
这两个表达式都会返回,Unit因此结果为Unit。
快速解决方法是在每个分支中创建dataTuple最后一条语句:
if (!validationMessages.isEmpty) {
dataTuple = (parsedJson.toString(), for (s <- validationMessages.toString()){
s.toString()
})
println(dataTuple)
dataTuple
} else {
dataTuple = (parsedJson.toString(), "some string...")
dataTuple
}
Run Code Online (Sandbox Code Playgroud)
但也可以考虑将这样的事情作为更简单的解决方案:
val msg =
if (validationMessages.nonEmpty) {
validationMessages.mkString(", ")
} else {
"some string"
}
(parsedJson.toString, msg)
Run Code Online (Sandbox Code Playgroud)
这mkString是替换此代码的尝试:
for (s <- validationMessages.toString()) {
s.toString()
}
Run Code Online (Sandbox Code Playgroud)
此代码似乎试图通过组合所有验证消息来创建一个字符串,但它实际上返回,Unit因为for没有yield. mkString调用toString的每个元素Set,然后通过在每个元素之间放置“,”来创建一个字符串。这似乎是大致想要的,并且应该很容易修改为实际要求。