方法 returns 单位而不是 scala 中的字符串
Method returns unit instead of string in scala
我试图从 Scala 中的 Set
类型中获取字符串。但是,无论我尝试什么,它都是 returning Unit
作为 return 类型而不是 string
.
if (!validationMessages.isEmpty) {
dataTuple = (parsedJson.toString(), for (s <- validationMessages.toString()){
s.toString()
})
println(dataTuple)
}
else {
dataTuple = (parsedJson.toString(), "some string...")
}
基本上,我正在尝试 return 像 (String, String)
这样的元组。我错过了什么?
块的值是块中最后一个表达式的值。在这种情况下 if
部分的值是
println(dataTuple)
而else
部分的值为
dataTuple = (parsedJson.toString(), "some string...")
这两个表达式 return 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
}
但也可以考虑像这样的更简单的解决方案:
val msg =
if (validationMessages.nonEmpty) {
validationMessages.mkString(", ")
} else {
"some string"
}
(parsedJson.toString, msg)
mkString
是尝试替换此代码:
for (s <- validationMessages.toString()) {
s.toString()
}
此代码似乎试图通过组合所有验证消息来创建一个字符串,但它实际上 returns Unit
因为 for
没有 [=23] =]. mkString
在 Set
的每个元素上调用 toString
,然后通过在每个元素之间放置“,”来创建一个字符串。这似乎是大致想要的,应该很容易修改到实际需求。
为什么代码会这样?
该代码具有 return 类型 Unit
,因为这是 if
语句的两个分支的 return 类型。
if
分支以 println(dataTuple)
结束,其中 return 为 Unit
。
else
分支以dataTuple = ...
结尾,即变量赋值,即returnsUnit
。如果你想让它return存储在dataTuple
中的元组,你只需要在最后添加dataTuple
。
您可能想做什么?
(parsedJson.toString, validationMessages.mkString("[", ", ", "]"))
这将 return 一个包含第一个 parsedJson
作为字符串的元组,第二个 validationMessages
的每个元素,以任意顺序(因为 Set
是无序的) ,以 [
开头,连续元素之间有一个 ,
,最后是 ]
。
所以如果 parsedJson
是 {"key1": "value1"}
并且 validationMessages
是 Set("unexpected key: key1", "missing key: key0")
这将 return ("{"key1":"value1"}",["unexpected key: key1", "missing key: key0"]
.
如果您不想在 .mkString
的 beginning/end 处放置一些特殊的东西,您可以仅使用中间参数(分隔符)来调用它。
如果validationMessages
为空,则validationMessages.mkString("delimiter")
return为空串,validationMessages.mkString("start", "delimiter", "end")
return为"startend"
.
scala 的优点之一是您可以在一行中完成复杂的事情(只要您足够了解这门语言)。
我试图从 Scala 中的 Set
类型中获取字符串。但是,无论我尝试什么,它都是 returning Unit
作为 return 类型而不是 string
.
if (!validationMessages.isEmpty) {
dataTuple = (parsedJson.toString(), for (s <- validationMessages.toString()){
s.toString()
})
println(dataTuple)
}
else {
dataTuple = (parsedJson.toString(), "some string...")
}
基本上,我正在尝试 return 像 (String, String)
这样的元组。我错过了什么?
块的值是块中最后一个表达式的值。在这种情况下 if
部分的值是
println(dataTuple)
而else
部分的值为
dataTuple = (parsedJson.toString(), "some string...")
这两个表达式 return 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
}
但也可以考虑像这样的更简单的解决方案:
val msg =
if (validationMessages.nonEmpty) {
validationMessages.mkString(", ")
} else {
"some string"
}
(parsedJson.toString, msg)
mkString
是尝试替换此代码:
for (s <- validationMessages.toString()) {
s.toString()
}
此代码似乎试图通过组合所有验证消息来创建一个字符串,但它实际上 returns Unit
因为 for
没有 [=23] =]. mkString
在 Set
的每个元素上调用 toString
,然后通过在每个元素之间放置“,”来创建一个字符串。这似乎是大致想要的,应该很容易修改到实际需求。
为什么代码会这样?
该代码具有 return 类型 Unit
,因为这是 if
语句的两个分支的 return 类型。
if
分支以 println(dataTuple)
结束,其中 return 为 Unit
。
else
分支以dataTuple = ...
结尾,即变量赋值,即returnsUnit
。如果你想让它return存储在dataTuple
中的元组,你只需要在最后添加dataTuple
。
您可能想做什么?
(parsedJson.toString, validationMessages.mkString("[", ", ", "]"))
这将 return 一个包含第一个 parsedJson
作为字符串的元组,第二个 validationMessages
的每个元素,以任意顺序(因为 Set
是无序的) ,以 [
开头,连续元素之间有一个 ,
,最后是 ]
。
所以如果 parsedJson
是 {"key1": "value1"}
并且 validationMessages
是 Set("unexpected key: key1", "missing key: key0")
这将 return ("{"key1":"value1"}",["unexpected key: key1", "missing key: key0"]
.
如果您不想在 .mkString
的 beginning/end 处放置一些特殊的东西,您可以仅使用中间参数(分隔符)来调用它。
如果validationMessages
为空,则validationMessages.mkString("delimiter")
return为空串,validationMessages.mkString("start", "delimiter", "end")
return为"startend"
.
scala 的优点之一是您可以在一行中完成复杂的事情(只要您足够了解这门语言)。