方法返回单位而不是 scala 中的字符串

Rom*_*Die 0 scala

我正在尝试从 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). 我缺少什么?

Tim*_*Tim 5

块的值是块中最后一个表达式的值。在这种情况下,该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,然后通过在每个元素之间放置“,”来创建一个字符串。这似乎是大致想要的,并且应该很容易修改为实际要求。