仓颉编程语言编程技巧-模式匹配

yumo6668小时前技术文章2

什么是模式匹配

仓颉编程语言中支持使用模式匹配表达式(match 表达式)实现模式匹配(pattern matching),允许开发者使用更精简的代码描述复杂的分支控制逻辑。直观上看,模式描述的是一种结构,这个结构定义了一个与之匹配的实例集合,模式匹配就是去判断给定的实例是否属于模式定义的实例集合。显然,匹配的结果只有两种:匹配成功和匹配失败。match 表达式可分为两类:带 selectormatch 表达式和不带selectormatch 表达式。

实现枚举类型的`==`操作符

package cangjie_test

main() {
    println("Red==Red? ${Red==Red}")
    println("Blue==Yellow? ${Blue==Yellow}")
}

enum Color {
    | Red
    | Yellow
    | Blue

    public operator func ==(that: Color): Bool {
        match ((this, that)) {
            case (Red, Red) => true
            case (Yellow, Yellow) => true
            case (Blue, Blue) => true
            case _ => false
        }
    }
}

输出

Red==Red? true
Blue==Yellow? false


实现类型转换

利用泛型+Option模型,推理目标类型

import std.convert.Parsable

main() {
    let i: ?Int = typeConvert("0123")
    println("Int: ${i}")

    let f: ?Float64 = typeConvert("3.14")
    println("Float64: ${f}")

    let s: ?String = typeConvert("cangjie")
    println("String: ${s}")

    let b: ?Bool = typeConvert("true")
    println("Bool: ${b}")

    let o: ?Array<Int> = typeConvert("[1]")
    println("Array<T>: ${o}")
}

func typeConvert<T>(str: String): ?T {
    let a: ?T = None
    match (a) {
        case _: ?Int => Int.parse(str) as T
        case _: ?Float64 => Float64.parse(str) as T
        case _: ?Bool => Bool.parse(str) as T
        case _: ?String => str as T
        case _ => None
    }
}

输出

Int: Some(123)
Float64: Some(3.140000)
String: Some(cangjie)
Bool: Some(true)
Array<T>: None

相关文章

C语言的数据类型

C语言的数据类型在C语言中,数据类型用于定义变量存储的数据种类和大小,主要分为以下几类:1. 基本数据类型(Primary Data Types)(1) 整数类型类型存储大小(通常)取值范围说明cha...

C#语言学习笔记19 —— C# 程序的结构,已做开发多年,还未认真看过

C# 程序的结构C# 程序由一个或多个文件(.cs 文件)组成。每个文件包含 0 个或多个命名空间。命名空间包含类、结构、接口、枚举、委托等类型或其他命名空间。在写本笔记时(2025年5月),.Net...

C#语言学习笔记20 —— 泛型(Generic),好用常用,却难以说明白

C# 泛型类型现在的编程语言都提供了一种解决代码重用的方案:泛型或模板。C# 的泛型也是一样,它提供一种观念,把类型作为参数,用来设计类和方法(还有结构体、接口、委托)。只有到了使用类和方法的时候,才...

溧阳计算机二级学习基础内容是哪些

以下是关于计算机二级学习的一些建议: ### 明确考试目标 计算机二级考试有多个科目可供选择,包括Java语言程序设计、Access数据库程序设计、MySQL数据库程序设计、Web程序设计、Pytho...

C语言程序的基本单位是什么,为何会是这个

C语言程序的基本单位据C语言相关的资料显示,C语言程序的基本单位一般指的是【函数】。为什么呢?个人的理解是,这可能是一种约定俗成的【模块化】编程的特性,模块化编程是一种良好的编程习惯,有助于代码的复用...