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

2020-10-08 11:47:19 +08:00
 xuanwu

原文链接:木兰重生:与 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 生态的兼容问题;字符串插值 (降权,发不起完整的)

759 次点击
所在节点    分享发现
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/713043

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX