我是 Scala 新手,发现下面的代码很难理解。如果你们能用简单的话解释一下 parseArguments 为“--config-path”做什么以及 ::path::tail 做什么,那将会非常有帮助。当我们尝试匹配变量 configPathArg 时,我们收到 scala.MatchError: None (of class scala.None$) 错误。
这里,当我们提交spark-submit命令时,我们将值传递给--config-path,但我们没有得到匹配的错误。您能否让我知道为什么即使我们将值传递给 --config-path 还是会出现错误?
提前致谢:)
def parseArguments(map: Map[String, String], list: List[String]): Map[String, String] = { list match {
case Nil => map
case ("--config-path" | "-cp") :: path :: tail =>
parseArguments(map ++ Map(configPathArg -> path), tail)
case unknown :: tail =>
parseArguments(map, tail)
}
}
val arguments = parseArguments(Map(), args.toList)
arguments.get(configPathArg) match {
case some(configPath: String) =>
val is = hfs.open(new Path(configPath))
}
语法
head :: tail
与 List
匹配,其中第一个元素是 head
,其余元素是 tail
(其余元素可以为空,即 Nil
)。
在你的情况下,
"--config-path" :: path :: tail
意味着你正在匹配一个List
,其中至少有2个元素,第一个是字符串--config-path
,第二个是任何值,但随后将作为path
提供。
List("--config-path", "whatever")
会匹配List("--config-path", "whatever", ...)
会匹配List("another string", "whatever")
不匹配