我刚接触Scala,发现下面的代码很难理解。如果你们能用简单的语言解释一下parseArguments对“--path-path”做了什么,以及::path::tail做了什么,那会很有帮助。当我们试图匹配变量pathArg时,我们得到了scala.MatchError:None(属于scala.None$)错误。
这里我们在提交spark-submit命令的时候给--num-path传递了值,但是没有得到匹配的错误。你能告诉我为什么即使我们给--num-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))
}
字符串
1条答案
按热度按时间ewm0tg9j1#
语法
head :: tail
匹配List
,其中第一个元素是head
,其余元素是tail
(其余元素可以为空,即Nil
)。在你的例子中,
"--config-path" :: path :: tail
意味着你正在匹配一个List
,其中至少有2个元素,第一个是字符串--config-path
,第二个是任何值,但随后将作为path
可用。List("--config-path", "whatever")
匹配path
的值为whatever
List("--config-path", "whatever", ...)
匹配path
的值为whatever
List("another string", "whatever")
不匹配