news 2026/6/23 0:43:30

跟我一起学“仓颉”编程语言-宏练习题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
跟我一起学“仓颉”编程语言-宏练习题

一、练习题

1. 定义一个可以获取非递归函数的修饰符、函数名、函数参数和函数体的宏。

// 宏包 macro package Study.define // 导包 import std.ast.* public macro GetFunction(input: Tokens) { var data = "" let funcDecl = FuncDecl(input) // 获取函数修饰符列表 let funcModifiers = funcDecl.modifiers for (funcModifier in funcModifiers) { data += "函数修饰符: ${funcModifier.dump()}\n" } let funcName = funcDecl.identifier data += "函数名: ${funcName.value}\n" // 获取函数参数列表 let funcParams = funcDecl.funcParams for (funcParam in funcParams) { data += "参数名: ${funcParam.identifier.value}, 参数类型: ${funcParam.paramType.toTokens()}\n" } // 获取函数体 let funcBody = funcDecl.block.nodes for (body in funcBody) { data += "函数体: ${body.toTokens()}\n" } quote($(data)) }
package Study // 导包 import Study.define.* import std.ast.* let data = @GetFunction func jieCheng(num: Int64) { var result = 1 for (i in 1..=num) { result *= i } result } main () { println(data) }

2. 定义一个可以获取类中变量,构造函数,普通函数的宏。

// 宏包 macro package Study.define // 导包 import std.ast.* public macro GetClass(input: Tokens) { var data = "" let classDecl = ClassDecl(input) for (body in classDecl.body.decls) { if (body is VarDecl) { data += "变量: ${body.toTokens()}\n" } if (body is PrimaryCtorDecl) { data += "主构造函数: ${body.toTokens()}\n" } if (body is FuncDecl) { let funcDecl = (body as FuncDecl).getOrThrow() if (funcDecl.identifier.value == "init") { data += "普通构造函数: ${body.toTokens()}\n" } else { data += "普通函数: ${body.toTokens()}\n" } } } quote($(data)) }
package Study // 导包 import Study.define.* import std.ast.* let data = @GetClass class User { User(var name: String, var age: Int64){} init(name: String) { this.name = name this.age = 18 } init(age: Int64) { this.name = "钝子生" this.age = age } func show() { return "你好" } } main () { println(data) }

二、小结

本章为大家详细的介绍了仓颉编程语言中宏练习题的内容,下一章,为大家带来网络通信三剑客的内容。最后,创作不易,如果大家觉得我的文章对学习仓颉服务端开发有帮助的话,就动动小手,点个免费的赞吧!收到的赞越多,我的创作动力也会越大哦,谢谢大家🌹🌹🌹!!!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 8:03:26

3分钟掌握B站缓存视频转换:m4s转MP4的智能解决方案

3分钟掌握B站缓存视频转换:m4s转MP4的智能解决方案 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾因B站视频突然下架而遗憾…

作者头像 李华
网站建设 2026/6/23 8:04:09

WiVRn与OpenXR标准:如何确保跨平台兼容性的完整指南

WiVRn与OpenXR标准:如何确保跨平台兼容性的完整指南 【免费下载链接】WiVRn The Linux OpenXR streaming application to standalone headsets 项目地址: https://gitcode.com/GitHub_Trending/wi/WiVRn WiVRn作为一款基于Linux的OpenXR流式传输应用&#xf…

作者头像 李华
网站建设 2026/6/18 3:43:33

EmotiVoice终极探索:解锁2000+音色与情感语音合成的完整实践

EmotiVoice终极探索:解锁2000音色与情感语音合成的完整实践 【免费下载链接】EmotiVoice EmotiVoice 😊: a Multi-Voice and Prompt-Controlled TTS Engine 项目地址: https://gitcode.com/gh_mirrors/em/EmotiVoice EmotiVoice是一款革命性的开源…

作者头像 李华