云计算、AI、云原生、大数据等一站式技术学习平台

网站首页 > 教程文章 正文

仓颉编程学习-结构类型_仓颉汉语编程

jxf315 2025-09-21 17:12:39 教程文章 1 ℃

struct类型:支持两类构造函数:普通构造函数(init)和主构造函数(结构标识符),这二者的区别在哪里?golang语言的结构,成员变量都会有一个默认的初始值(根据变量类型),感觉更精炼一些。

struct 类型是值类型

struct 的成员(包括成员变量、成员属性、构造函数、成员函数、操作符函数(详见操作符重载章节))用 4 种访问修饰符修饰:privateinternalprotectedpublic,缺省的修饰符是 internal。==> class类型可以有这些,struct类型感觉定义得有点太乱/复杂了。

mut函数让复杂性更上一筹,甚至感觉有点生硬得自圆其说。

==== 这种设计还是感觉像各种编程语言的杂糅,不够精炼。

struct 只能定义在源文件的顶层作用域。

enum 只能定义在源文件的顶层作用域


模式匹配:支持函数式编程

模式可以分为两类:refutable 模式和 irrefutable 模式。在类型匹配的前提下,当一个模式有可能和待匹配值不匹配时,称此模式为 refutable 模式;反之,当一个模式总是可以和待匹配值匹配时,称此模式为 irrefutable 模式。


class 类型:实现面向对象编程。classstruct 的主要区别在于:class 是引用类型,struct 是值类型,它们在赋值或传参时行为是不同的;class 之间可以继承,但 struct 之间不能继承。

class 只能定义在源文件的顶层作用域。

open 修饰符

sealed 修饰符

=== 感觉就是在不断发明新的名字,为什么不能使用其他语言已经有的并已被大家接受的名字?

struct 一样,class 中也支持定义普通构造函数和主构造函数,普通构造函数以关键字 init 开头。

=== 可以参考golang的设计,给每一个成员变量根据自身类型设置一个默认值,就可以去掉init函数。

终结器:~init(), 这个不就是C++的析构函数吗?起个新名字有什么意义吗?

问题:struct类型和class类型的init函数是需要手工调用还是自动?


struct/class类型的成员变量, var/let也是需要注意区分使用的。

==== 还是一个字:杂糅,带来的排列组合注意事项,不够简洁。

最近发表
标签列表