木兰语言 0.0.15.1:继续改写 Python 冒险游戏;引用包路径规则小结
这几天在用木兰语言继续改写 Python 文字冒险游戏例程时,又体验到引用模块时使用的包路径与 Python 的差别,之前虽然写过相关测试但未整理成文档,在此小结一下。
以下面的文件目录为例(注意:不需在包目录中添加 __init__.py
之类的文件):
- 一级包
- 二级包
- 甲.ul
- 乙.ul
- 二级包
甲和乙为木兰源码,内容如下,甲.ul
:
a = 3
乙.ul
中引用甲模块:
using 甲 print(甲.a)
如果在“二级包”目录下运行:
$ 木兰 乙.ul
输出 3 无误。
但如果在“二级包”的上一级目录“一级包”下运行则会报错:
$ 木兰 二级包/乙.ul 😰 没找到模块:‘甲’ 调用层级如下 见第1行:using 甲
需要将 乙.ul
中的包路径改为才能正确运行:
using 二级包.甲 print(二级包.甲.a)
此时如果有另一个二级包:
- 一级包
- 二级包
- 甲.ul
- 乙.ul
- 二级包2
- 丙.ul
- 二级包
也可以在乙中引用丙:
using 二级包2.丙 print(二级包2.丙.b)
丙.ul
内容:
b = 4
在“一级包”下运行 $ 木兰 二级包/乙.ul
输出 4
类似的,如果在“二级包”下运行则会报错:
$ 木兰 乙.ul 😰 没找到模块:‘二级包2’ 调用层级如下 见第1行:using 二级包2.丙
简言之,现在看来的包路径规则是:
当前运行目录 + 包路径(将.替换为/)= 模块路径
比如上面在“一级包”下运行时,运行目录为:一级包
引用的模块“甲”的路径为:一级包/二级包/甲
那么包路径就要:二级包/甲(代码中是 using 二级包.甲
)
这样的包路径设定规则比较直观,但也意味着,对于存在引用的模块,必须在一个特定目录下运行,在任何其他目录下运行都会出现无法找到模块的错误。
下面是 0.0.15.1 版重现的几个小功能:
- throw 语法,对应 Python 的 raise
- isa 内置函数,对应 Python 的 isinstance
- 改进部分报错信息
文档方面,为便于有意者参与木兰项目的开发维护,编写了开发流程与项目结构简介,今后逐步完善。另开始小结与 Python 的语法对比。
附:代码量统计
主要部分的代码行数统计,格式为:上次->现在。
- 木兰代码量 3260 -> 3307
- 运行环境,实现与测试大部为木兰代码:582
- 木兰测试用例,包括部分实用小程序(如井字棋):2678 -> 2725 (报错信息测试用例替代了源码中的注释)
- Python 代码量(木兰实现与测试框架):2721 -> 2920
分析器/语法分析器.py
:1015 -> 1021分析器/词法分析器.py
:207 -> 213分析器/语法树.py
:202 -> 209环境.py
,定义全局方法:172 -> 174测试/期望值表.py
(从“运行所有.py”中提取):131 -> 133功用/规律.py
,正则表达式 API 原型:100分析器/语法成分.py
,从语法分析器中提取出来的枚举常量:82 -> 83功用/反馈信息.py
:71 -> 75测试/运行所有.py
,检验所有木兰测试代码片段:62 -> 71- 未变
交互.py
,交互环境(REPL):148中.py
,主程序:74功用/调试辅助.py
,:57setup.py
, 34测试/unittest/语法树.py
,确保生成的语法树与原始版本一致:88测试/unittest/正则.py
:62测试/unittest/交互.py
,交互环境相关测试:28测试/unittest/所有用例.py
:24分析器/错误.py
:26

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
[Spring-Analysis] v0.0.12 发布
Spring-Analysis 是一个围绕 springframework 进行源码分析的项目。 v0.0.12 版本现已发布,此版本更新内容包括: DefaultListableBeanFactory AbstractAutowireCapableBeanFactory 项目地址: GitHub Gitee
- 下一篇
DuckPhp v1.2.9 已经发布,PHP 框架
DuckPhp 是一个 PHP框架,回归 PHPer 的简单化。秉承理念:使用起来简单;不需要第三方依赖。 DuckPhp v1.2.9 已经发布,此版本更新内容包括: AppPluginTrait 微调(下个版本解决 view 不明显问题 ComponentBase 简化 ExtendableStaticCallTrait::CallExtendStaticMethod 调用方式用@分割对象和方法 Kernel 内核简化,减少不必要东西,取消 use_super_global 选项 Route prepare($serverData); 统一为 reset DuckPhp 精简东西,不再需要载入太多东西 Console 支持 cli_mode Installer 尝试支持 windows JsonView 新增 JsonView Pager 去掉 SuperGlobal 其他因去掉 SuperGlobal 做了一些改动 ToDo 下个版本完善并加入 SuperGlobalReplacer 类 SingletonEx 添加一个集中式处理的 SimpleReplacer 类。 详情查看:...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8安装Docker,最新的服务器搭配容器使用
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19