木兰重生:与 Python 生态的兼容问题;字符串插值

原文链接:木兰重生:与 Python 生态的兼容问题;字符串插值

节选:

前两天用木兰调用 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 生态的兼容问题;字符串插值 (降权,发不起完整的)

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注