Scala—有没有办法将模式匹配转换为if/else?

Scala—有没有办法将模式匹配转换为if/else?,scala,if-statement,functional-programming,pattern-matching,Scala,If Statement,Functional Programming,Pattern Matching,我试图在Scala中实现flatte函数,但未成功,但确实发现了以下实现: 现在,有没有办法用if/else来写这个?我正试图了解模式匹配,这将有助于了解这种模式匹配的if/else实现。我理解(head:List[])::tail的意思是“如果xs是一个有头的列表,那么它也是一个列表和尾部”,但无法找到用if/else重写它的方法。模式匹配是与if/else相同,还是与之完全不同?所有if/else语句是否都可以进行模式匹配,反之亦然?多谢各位 应该是这样的: if (xs.isInstan

我试图在Scala中实现
flatte
函数,但未成功,但确实发现了以下实现:


现在,有没有办法用
if/else
来写这个?我正试图了解模式匹配,这将有助于了解这种模式匹配的if/else实现。我理解
(head:List[])::tail
的意思是“如果xs是一个有头的列表,那么它也是一个列表和尾部”,但无法找到用if/else重写它的方法。模式匹配是与if/else相同,还是与之完全不同?所有if/else语句是否都可以进行模式匹配,反之亦然?多谢各位

应该是这样的:

 if (xs.isInstanceOf[List]) {
   val lst = xs.asInstanceOf[List]
   if (lst == Nil) {
     Nil
   } else if (lst.head.isInstanceOf[List]) {
      flatten(lst.head.asInstanceOf[List]) ++ flatten(lst.tail)
   } else {
      lst.head :: flatten(lst.tail)
   }
 }

我明白了,这看起来比模式匹配更混乱。这是否是使用模式匹配与if/else的激励因素?在后台,它将被转换成这样的东西,因此您需要了解编译器将生成什么而不是模式匹配。没有魔法;)还要记住,模式匹配并不能像类型擦除那样覆盖所有情况。这都是关于检查实例的,有时,如果可能的话,直接转换成switch语句。但是,当我尝试编译此代码时,它导致了以下错误:
-类型不匹配;发现:所需单元:列表[Any]-类型列表获取类型参数-类型不匹配;找到:所需单元:列出[任何]
尝试用
[列表]
替换
[列表]]
 if (xs.isInstanceOf[List]) {
   val lst = xs.asInstanceOf[List]
   if (lst == Nil) {
     Nil
   } else if (lst.head.isInstanceOf[List]) {
      flatten(lst.head.asInstanceOf[List]) ++ flatten(lst.tail)
   } else {
      lst.head :: flatten(lst.tail)
   }
 }