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

yumo6662个月前 (06-18)技术文章18

什么是模式匹配

仓颉编程语言中支持使用模式匹配表达式(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#语言学习笔记19 —— C# 程序的结构,已做开发多年,还未认真看过

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

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

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

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

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

为什么说Java是高内聚低耦合的典范?小白也能懂的积木解释

咱们来聊一个听起来有点玄乎,甚至可能让你觉得是专业程序员才懂的词儿——高内聚低耦合。是不是一听就头大?别担心!今天老码农就用最通俗易懂的语言,打个比方,让你秒懂这个在编程世界里,堪称代码界大智慧的核心...

最全的 MCP协议的 Stdio 机制代码实战

你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益:了解大厂经验拥有和大厂相匹配的技术等希望看什么,评论或者私信告诉我!一、背景前面我们已...

解密Python:如何轻松理解数据类型

Python是现代编程语言中非常流行的一种,它的语法简洁、易懂,非常适合初学者。而在Python编程中,“数据类型”是最基础也是最重要的概念。理解这个概念,将为你之后的编程打下坚实的基础。1. 什么是...