在scala中期望Array [String]得到Array [Nothing] - 如何处理它?

时间:2017-10-31 01:56:22

标签: scala

在下面的代码中,如何处理返回的函数" nothing"错误。 使用案例:

  • 命令参数传递给args:Array [String]
  • 使用以下条件声明:
    • 如果args为空,并执行某些操作
    • 如果args有一些价值,我将简单地返回args

问题: 代码抛出一个编译时错误,说明

  • expected:Array [string]
  • 并得到:数组[注意]

如何在scala中处理这个问题?使用选项,如果是,那么如何?

def main(args: Array[String]) = {
  inp_schemas = Array("a","b")
  inp_schemas.map{ x_schema =>                                                                 
    val tables: Array[String] = 
      if (args.length == 0) {
        <do something that returns array[string]>                                
      } else {
        args
      } 
    }
}

4 个答案:

答案 0 :(得分:2)

这里有两件事需要考虑。

1)<do something>块的返回值。确保它是Array[String]

2)然而,主要的是你的map函数返回Unit。最后一个语句是对tables的赋值。要解决这个问题,请删除变量和赋值,或者在map函数的末尾添加要返回的内容。对于第二种解决方案,请参见下面的代码。

inp_schemas.map{ x_schema =>                                                                 
  val tables: Array[String] = 
    if (args.length == 0) {
      <do something> // make sure this part returns an Array[String]                           
    } else {
      args
    }
  tables // returns tables
}

答案 1 :(得分:0)

当你的args: Array[String]不包含任何内容时,即val args = Array()它将抛出该错误,因为它期待Array [String]但是args将是Array [Nothing]。您必须检查命令行输入,<do something>应该返回一个数组[String]。

答案 2 :(得分:0)

所以诀窍在于如何在主类中定义args。

早些时候,这就是发生的事情:

With no cmd input> val args = Array()
Results in> args: Array[Nothing] = Array()

With cmd inp> val args = Array("a","b")
Results in> args: Array[String] = Array(a, b)

然后我明确地将args定义为Array [String]:

With no cmd input> val args:Array[String] = Array()
Results in> Array[String] = Array() 
With cmd inp> val args:Array[String] = Array("a","b")
Results in> Array[String] = Array(a, b)

在两种情况下都是Array [String]。

答案 3 :(得分:0)

无论你在if子句和你传递的参数中做什么,

让你的map函数返回Unit。函数的返回类型是Array [Unit],值是Array((),())

我猜这是你想要做的?

def main(args: Array[String]) = {
  val inp_schemas = Array("a","b")
  inp_schemas.map{ x_schema =>
    val tables: Array[String] =
      if (args.length == 0) {
        Array("a")
      } else {
        args
      }
    tables // Return tables
  }
}