【问题标题】:Scala: Are Pattern Matching and Match Expression the Same in Scala?Scala:Scala 中的模式匹配和匹配表达式是否相同?
【发布时间】:2017-02-13 15:32:14
【问题描述】:

我在 Scala 中看到许多标题为模式匹配的资源,但它们只讨论匹配表达式。 Scala中的模式匹配是否仅用于匹配表达式?有人可以清楚地了解 Scala 中的模式匹配与匹配表达式吗?

我是否应该将模式匹配视为比匹配表达式更广泛的概念?并认为匹配表达式只是模式匹配的一种用法?或者在 Scala 中,这两个概念被认为是同义词?

【问题讨论】:

  • 您能否详细说明您所说的 match expression 是什么意思,它不是指模式匹配?

标签: scala pattern-matching


【解决方案1】:

match 表达式只是使用模式匹配的一种方式。相同的概念用于各种上下文,例如:

//Exception handling    
try{
   //....
} catch {
   case ex: NullPointerException => ex.printStackTrace()
   case Exception(msg) => println(msg)
   case _ => println("error")
}

// Map/flatMap/filter for collections
val l  = List(1, "2", 3L, Some(1L))
l.foreach { 
 case l:Long => println("Long 1")
 case s:String => println(s)
 case Some(n) => println(n)
 case None => println("error")
 case _ => println("dunno")
}

【讨论】:

  • Jon:在上面的两个示例中,您都有案例陈述。这是否意味着在 Scala 中任何时候涉及模式匹配,都使用关键字“case”?或者存在使用模式匹配但不使用关键字“case”的构造?
  • 是的。例如,如果使用实现isDefinedAtorElse 将多个PartialFunction 链接在一起,则可以实现相同的效果。使用case 更简单。
  • 一个没有case的模式匹配的实际例子是val (a, b) = (1, 2)
  • 谢谢阿列克谢;这正是我想要的;这表明在 Scala 中,模式匹配在匹配表达式以外的地方使用,甚至不需要 case 子句。
猜你喜欢
  • 1970-01-01
  • 2013-11-25
  • 2020-04-29
  • 2023-03-08
  • 1970-01-01
  • 2015-03-04
  • 1970-01-01
  • 1970-01-01
  • 2011-12-03
相关资源
最近更新 更多