原文链接:木兰重生:与 Python 生态的兼容问题;字符串插值
节选:
前两天用木兰调用 pygame 库实现了个井字棋棋盘界面。期间遇到了一些问题,先小结一下。
注:解决方法限于个人至今对木兰和 Python 的了解。如有高招,烦请指教!
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
}
...
之后支持变长参数时,就可以合并为一个函数了。
下面是 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 = 名
}
}
上面两种方法就都可用。
......
完整内容见原文链接:木兰重生:与 Python 生态的兼容问题;字符串插值 (降权,发不起完整的)