Scala 中带尾部的匹配案例

问题描述 投票:0回答:1

我是 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))
 }
scala apache-spark bigdata
1个回答
2
投票

语法

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")
    不匹配
  • 0 或 1 项的列表将不匹配
© www.soinside.com 2019 - 2024. All rights reserved.