zoukankan      html  css  js  c++  java
  • scala高阶函数之匹配功能

    1、其功能类似于Java switch,功能要强大于java, 可以对数据值和数据类型进行匹配

    2、语法

    变量 match{

      case 可能性1 => 操作1

      case可能性2 => 操作2

      ……

      case _ => 默认操作

    }

    示例代码

    package day3
    
    object demo_match {
        def main(args: Array[String]): Unit = {
            var sin = 2
            val ch = 'd'
            ch match {
                case '-' => sin -= 2
                case '+' => sin += 2
                case '/' => sin /= 2
                case _ => println("请输入正确的符号")
            }
            println(sin)
        }
    
    }

    别一种简洁的写法: 守卫

    package day3
    import scala.io.StdIn
    object demo_match {
    
        def main(args: Array[String]): Unit = {
            var sin = 2
            val ch = StdIn.readChar()
            sin = ch match {  // case匹配结果直接赋值给变量的用法叫: 守卫
                case '-' => 1
                case '+' => 2
                case '/' => 3
                case _ => 0
            }
            println(sin)
        }
    
    }

    举个变量匹配和类型匹配的例子

    package day3
    import scala.io.StdIn
    object demo_match {
    
        def main(args: Array[String]): Unit = {
    //        matchVariable()
            matchType
        }
        // 变量匹配
        def matchVariable(): Unit ={
            "hello word".foreach(c => println(
                c match {
                    case ' ' => " space"
                    case _ => "char:" + c
                }
            ))
        }
    // 类型匹配
        def matchType(): Unit ={
            class person(name:String, age:Int){}
            // 定义老师类
            class Teacher(name:String, age:Int) extends person(name, age){
                def teach(): Unit ={
                    println(s"老师 ${name} ${age} 岁了!")
                }
            }
            // 定义学生类
            class Student(name:String, age:Int) extends person(name,age){
                def study(): Unit ={
                    println(s"学生 ${name} ${age}岁了!")
                }
            }
    
            def dosth(p:person): Unit ={
                p match {
                    case t:Teacher => t.teach()
                    case s:Student => s.study()
                    case _ => println("类型不匹配")
                }
            }
    
            dosth(new Teacher("lixi",23))
            dosth(new Student("kongming",18))
    
        }
    
    }

    数组匹配

    package day3
    import scala.io.StdIn
    object demo_match {
    
        def main(args: Array[String]): Unit = {
            val list1 = Array(0,1,2)
            matArray(list1)
        }
    
        def matArray(arrs:Array[Int]): Unit ={
            arrs match {
                case Array(x, y) => println(s"x=${x}, y=${y}")  // 两元素的列表
                case Array(0, _*) => println(s"Array[0,*")   // 第一个元素为0,其它位置元素任意
                case _ => println("请传入正确的列表")
            }
        }
    }
  • 相关阅读:
    [GEF]实现模板功能
    一篇WTP文章
    写代码的代码:JET
    投票选择eclipse.org的新界面
    在SWT里显示AWT对象
    Plugin.xml > Manifest.mf
    关于本体编程的实现
    一个用OWLS组装Web服务的例子
    感受Ruby on Rails
    通过OCP考试
  • 原文地址:https://www.cnblogs.com/kongzhagen/p/15178536.html
Copyright © 2011-2022 走看看