`

Scala Pattern Matching

 
阅读更多

原创转载请注明出处:http://agilestyle.iteye.com/blog/2333026

 

 

基于值的模式匹配 

A match expression compares a value against a selection of possibilities. All match expressions begin with the value you want to compare, followed by the keyword match, an opening curly brace, and then a set of possible matches and their associated actions, and ends with a closing curly brace. Each possible match and its associated action begins with the keyword case followed by an expression. The expression is evaluated and compared to the target value. If it matches, the expression to the right of the => (“rocket”) produces the result of the match expression.

package org.fool.scala.basic

object ScalaMatchExpressions extends App {
  def matchColor(color: String): String = {
    color match {
      case "red" => "RED"
      case "blue" => "BLUE"
      case "green" => "GREEN"
      case _ => "UNKNOWN COLOR: " + color
    }
  }

  println(matchColor("red"))
  println(matchColor("white"))
}

Console Output


  

基于类型的模式匹配

参数类型Any允许任何类型的参数。如果向某个方法传递的类型具有多样性,并且他们没有任何共性成分,那么Any就可以解决此问题。下划线的作用是通配符,用来匹配任何与前面的值不匹配的对象。

package org.fool.scala.basic

case class Person(name: String)

object ScalaPatternMatchingWithTypes extends App {
  def acceptAnything(x: Any): String = {
    x match {
      case s: String => "A String: " + s
      case i: Int if (i < 20) => s"An Int Less than 20: $i"
      case i: Int => s"Some Other Int: $i"
      case p: Person => s"A person ${p.name}"
      case _ => "I have no fucking idea!"
    }
  }

  println(acceptAnything(5))
  println(acceptAnything(25))
  println(acceptAnything("Hello World"))

  val p = Person("Kobe")
  println(acceptAnything(p))

  println(acceptAnything(Vector(1, 2, 3)))
}

Console Output


 

基于case类的模式匹配

package org.fool.scala.basic

case class Passenger(first: String, last: String)

case class Train(travelers: Vector[Passenger], line: String)

case class Bus(passengers: Vector[Passenger], capacity: Int)

object PatternMatchingCaseClasses extends App {
  def travel(transport: Any): String = {
    transport match {
      case Train(travelers, line) =>
        s"Train line $line $travelers"
      case Bus(travelers, seats) =>
        s"Bus size $seats $travelers"
      case Passenger => "Walking along"
      case what => s"$what is in limbo!"
    }
  }

  val travellers = Vector(
    Passenger("Kobe", "Bryant"),
    Passenger("Michael", "Jordan")
  )

  val trip = Vector(
    Train(travellers, "CRH Train"),
    Bus(travellers, 100)
  )

  println(travel(trip(0)))
  println(travel(trip(1)))

}

Note:

没有任何类型的标识符(what),表示它会匹配上面各个case表达式未匹配的任何其他事物。

Console Output


 

 

 

 

  • 大小: 10.9 KB
  • 大小: 15.9 KB
  • 大小: 14.2 KB
分享到:
评论

相关推荐

    scala pattern match

    在Scala众多强大的特性中,模式匹配(Pattern Matching)是一个非常引人注目的功能,它不仅仅局限于字符串匹配,而是广泛应用于数据结构的解析和组合。 #### 模式匹配的概念 通常当我们提到“模式匹配”时,往往会...

    scala-2.10.2

    scala.util.matching - Pattern matching in text using regular expressions. scala.util.parsing.combinator - Composable combinators for parsing. scala.xml - XML parsing, manipulation, and serialization.

    scala-2.12.5.tgz

    另外,该版本还对Pattern Matching进行了优化,使得在处理数据结构时更加灵活和高效。 在函数式编程方面,Scala 2.12.5提供了强大的函数库,包括集合API的增强。这个版本的集合库进一步提升了性能,并且添加了更多...

    scala-2.11.8.zip

    6. **Case类和Pattern Matching**:Scala的Case类和模式匹配功能使得处理枚举类型和解析数据变得更加方便。 7. **泛型**:Scala的泛型系统比Java的更为强大,可以更好地处理类型安全和类型擦除。 8. **对象和类的...

    scala for the impatient

    Working with higher-order functions and the powerful Scala collections library * Leveraging Scala's powerful pattern matching and case classes * Creating concurrent programs with Scala actors * ...

    scala-sdk-2.12.3.rar

    7. **Pattern Matching**:Scala 的模式匹配功能允许开发者以一种简洁的方式处理不同情况,常用于解构复合数据类型如案例类(case class)。 8. **Scalactic 和 ScalaTest**:虽然这两个不是 Scala SDK 的一部分,...

    Scala编程(完整版)

    Pattern Matching** 模式匹配是Scala中的一个重要特性,可以用来解构复杂的数据结构,如列表、元组或自定义的case类,简化了条件判断和数据解析。 **8. Type Inference** Scala具有强大的类型推断能力,很多情况下...

    scala_lift

    书中可能会涵盖Scala的基础语法、函数式编程概念、类型系统,以及如何利用Scala的特性来优化Lift应用的性能,如使用case class和pattern matching等。 通过阅读这三本书,读者不仅可以掌握 Scala 语言的基本知识,...

    Programming Scala

    * Know how to use mixin composition with traits, pattern matching, concurrency with Actors, and other essential features, * Take advantage of Scala's built-in support for XML, * Learn how to develop ...

    scala核心编程总结

    6. **Pattern Matching(模式匹配)**:Scala的模式匹配功能强大,不仅可以用于匹配简单的值,还能应用于类型匹配、抽象语法树等复杂场景。这种能力大大简化了代码的编写,提高了代码的可读性。 7. **Object ...

    快学Scala-课后习题答案-源码

    8. **Pattern Matching**: Scala的模式匹配功能允许开发者根据不同的情况执行不同的代码块,常用于解析数据和处理case类。 9. ** Higher-Kinded Types**: 这是Scala中的一个高级特性,允许定义类型参数为其他类型...

    Scala数据结构和算法.docx

    4. **Pattern Matching**:Scala的模式匹配允许开发者对数据进行解构,并根据不同的结构执行不同的代码块,这在处理数据结构和算法时非常有用。 5. **高阶函数**:Scala中的函数可以作为一等公民,可以赋值给变量、...

    Functional Programming Principles in Scala Assignments Week3

    5. **模式匹配(Pattern Matching)**:Scala的强大的语法特性,允许解构复杂的数据结构并根据不同的形状执行不同操作。 6. **函数式数据结构**:如链表、树和图等,它们的操作都是通过纯函数完成,没有副作用。 7. ...

    spark开发基础之Scala快餐.pdf

    Scala的另一个重要特性是模式匹配(pattern matching),这是一个强大的工具,允许程序分支处理不同数据类型的结构和值。它类似于switch语句,但能处理更复杂的类型匹配。 了解Scala的这些基础知识对于深入学习...

    Programming in Scala

    - 进一步探索Scala的高级特性,如模式匹配(pattern matching)、隐式转换(implicit conversions)等。 - 深入理解Scala的类型系统,如何利用泛型(generics)编写灵活的代码。 - 开始接触Scala标准库中的常用类和方法...

    Functional Programming Principles in Scala Assignments Week2

    四、模式匹配(Pattern Matching) 模式匹配是Scala中强大的语法特性,它允许我们在一个表达式中同时检查多种可能的情况。例如,解构元组或处理枚举类型时,模式匹配非常有用: ```scala val tuple = (1, "two") ...

    Scala for the Impatient.pdf

    Pattern matching is a powerful feature in Scala that allows for flexible data manipulation and conditional logic. - **Case Statements**: Case statements can be used to match values or patterns. For ...

    Scala Cookbook

    模式匹配(pattern matching)作为Scala的核心特性之一,可以用来处理复杂的数据结构、实现高级的控制流程等;异常处理(exception handling),Scala的异常处理机制与Java类似,但提供了更高级的控制和自定义异常...

Global site tag (gtag.js) - Google Analytics