在下面的代码中,如何处理返回的函数" nothing"错误。 使用案例:
问题: 代码抛出一个编译时错误,说明
如何在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
}
}
}
答案 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)
让你的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
}
}