在Scala中匹配大小写和尾部

4urapxun  于 5个月前  发布在  Scala
关注(0)|答案(1)|浏览(53)

我刚接触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))
 }

字符串

ewm0tg9j

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")不匹配
  • 0或1项的列表不匹配

相关问题