木兰重生与Python生态的兼容问题字符串插值
本项目旨在重现「木兰」编程语言的语法和功能,已开源在码云。所有例程演示的语法可用原始的木兰可执行文件 ulang-0.2.2.exe 检验。如发现有异烦请告知,定将礼谢。
前两天用木兰调用 pygame 库实现了个井字棋棋盘界面。期间遇到了一些问题,先小结一下。1 生态兼容问题
注:解决方法限于个人至今对木兰和 Python 的了解。如有高招,烦请指教!1.1 元组 (tuple)
python 中很常用的结构,可以如下初始化:>>> t = (1,2) >>> t (1, 2) >>> t = 2, 3 >>> t (2, 3)
但木兰中好像没找到类似的简便方法。幸好与 python 相似,函数返回多项时就会打包成元组,因此暂时这样定义函数:func 多项2(a, b) { return a, b } func 多项3(a, b, c) { return a, b, c } ...
之后支持变长参数时,就可以合并为一个函数了。1.2 如何引用 type 属性
下面是 pygame 的常见操作,检查 pygame.event 的 type:for event in pygame.event.get(): if event.type == pygame.QUIT :
但木兰中的 type 是类型定义的关键词,因而如果仍使用 .type 会报错。刚遇到这一问题时,颇为震惊,以为发现了木兰的一个大硬伤,不过还好 python 还有一个__getattribute__("type")可用。另一种方法用在这里就无法获得 type 值:func getType(个体) { for 属性, 值 in 个体.__dict__.items() { return 值 if 属性 == "type" } }
大概因为这个 type 是个 @property(木兰中的应变属性),如果是普通属性如下:type 人 { func $人(名) { $type = 名 } }
上面两种方法就都可用。1.3 键 in 字典
python 中判断字典是否包含某键,推荐使用"键 in 字典",集合也类似。木兰中的 in 关键词并不支持这种操作,也没找到其他语法支持。现在只找到调用__contains__()这一方式…2 本周重现功能:字符串插值
python 的字符串插值功能比如"f"{行号}.0""可以简化字符串拼接。这几天重现了木兰的类似功能,如下对比,比拼接方式简洁不少:"[" + $词性 + " 行:" + str($行) + " 列:" + str($起) + "~" + str($止) + "], 内容: " + $内容 // 拼接 "[`$词性` 行:`$行` 列:`$起`~`$止`], 内容: `$内容`" // 插值
除了"`表达式`"格式,木兰还支持"(表达式)"格式。至于为何支持两种格式,暂时想到的一种使用场景是带有"`"字符的字符串插值,比如 "`a某变量b",那么"某变量"就可以用"()":a = 3 print("`a(a)a") => `a3a print("`a`a`a") => 3a`a
这有个实现细节的困惑。在插值的语法树节点创建时,使用的是 ast.Mod() 运算符。但这不是求余操作么?这个 Mod 有详细说明文档吗?附录:代码量统计
主要部分的代码行数统计,格式为:上次->现在。木兰代码量编辑器,实现与测试都是木兰代码:333木兰测试用例,包括部分实用小程序:2160
Python 代码量(包括测试部分):2396 -> 2425分析器/语法分析器.py:958 -> 986分析器/词法分析器.py:198测试/运行所有.py,检验所有木兰测试代码片段:185环境.py,定义全局方法:157分析器/语法成分.py,从语法分析器中提取出来的枚举常量:79未变分析器/语法树.py:178交互.py,交互环境(REPL):138功用/反馈信息.py:49中.py,主程序:41分析器/错误.py:17测试/unittest/语法树.py,确保生成的语法树与原始版本一致:67测试/unittest/交互.py,交互环境相关测试:28
小米新电池技术曝光,小米12ultra设计曝光?小米发布了新的电池技术,当然这个技术会让手机电池在同等尺寸下,增加百分之十的容量,这个是关键的提升,同时小米12ultra也曝光了设计思路?小米新的电池技术其实就是改变了封装方法,
富可抵国苹果市值三万亿美金,实物对比一下你就知道有多可怕了苹果市值三万亿美元,相当于近二十万亿人民币,若全部是一百元钞來计算,重量相当于二十三万吨,一列火车正常有四十个车卡,一卡正常运载六十吨,那么要三千三百多个卡才能运载,近一百列火车才
世界上最富有的10个人排名地球上最富有的10人全球前10名最富有的人的净资产合计为1。4万亿美元。在某些情况下,这与澳大利亚的GDP规模大致相同。这些超级富豪是谁,他们的财富来源是什么?以下是地球上前1
文兴自动驾驶是现实不是故事本文共1617字阅读完约4分钟文兴新能源汽车时代的大幕已经拉开,它们对产业链的拉动和对相关行业的升级换代也正在逐步深化之中。12月8日有媒体报道,乘联会数据显示,2021年11月新
多元发展的元宇宙,你是否感知日前,元宇宙相关话题快速破圈,热度持续上升,终极的元宇宙联通物理世界和数字世界,将改变人类的生活方式,重塑数字经济体系。元宇宙将大量离散的单点创新聚合形成新物种,带来长期超越想象的
元宇宙会成为下一个投资风口吗?首先来了解一下元宇宙的定义元宇宙是一个空间维度上虚拟而时间维度上真实的数字世界利用科技手段进行链接与创造的,与现实世界映射与交互的虚拟世界,具备新型社会体系的数字生活空间。它整合了
iPhone终将落幕,苹果传来消息,iPhone未来或退出舞台众所周知,自从5G通信技术来临以后,尽管目前我们还没有享受到5G带来的红利期,但是各种先进的技术已经都有所突破,甚至已经开始应用了,比如远程医疗工业物联网等等。当然,这些都是城市建
最近多家银行网点关停,你的存款还安全吗?非常安全,因为不是银行有我的钱,而是我有银行的钱,所以我不担心,哈哈哈哈哈!从现阶段来看,大多数银行存款还是比较安全的。4家破产的银行都是地方股份制商业银行,无论是从规模风控水平管
46940元起售,全球限量19台!iPhone13Pro乔布斯版发售,你买吗?俄罗斯奢侈品制造商Caviar是我们的老朋友,时不时开始整活引发大量关注,例如推出定制版本的华为三星等众多品牌手机,最多当然还是iPhone系列产品。Caviar最新推出定制iPh
管理软件有哪些好的推荐?按厂商分世界知名管理软件有SAPOracleSALEFORCEJDEBANN台湾省的鼎捷,顺景(已经变成大陆企业),高格(已经变成大陆企业),天思天心,有利大陆的公司有用友金蝶速达
JavaNIO三组件SelecotrChannel实现原理解析一NIO聊天室入门案例在学习原理之前,先来了解一个JavaNIO实现聊天室的小案例,该案例只有三个类NioServer聊天室服务端NioClient聊天室客户端ClientThre