木兰语言的引用相关功能与问题新发现
上周继续改写 Python 文字冒险游戏第十二章,期间发现个木兰编程语言在引用功能上的特别之处。
起因是这样,在 世界.ul 中添加了随机敌人:type 敌人位置 : 地块 { func $敌人位置(x, y) { 随机 = random.random() if 随机 < 0.50 { $敌人 = ch12.敌人.大蜘蛛() $提示出现 = "一只大蜘蛛从它的网上跳到你面前!" $提示死亡 = "死蜘蛛的尸体在地上发臭。" } elif 随机 < 0.80 { $敌人 = ch12.敌人.食人魔() $提示出现 = "一个食人魔挡住了去路!" $提示死亡 = "食人魔倒地,胜利!" } elif 随机 < 0.95 { $敌人 = ch12.敌人.蝙蝠群() $提示出现 = "一阵尖锐的噪声逐渐变大……突然被一群蝙蝠团团包围!" $提示死亡 = "数十只死蝙蝠散落在地。" } else { $敌人 = ch12.敌人.石头怪() $提示出现 = "你惊醒了一只沉睡的石头怪!" $提示死亡 = "怪物被打败,变回了普通石头。" } super.__init__(x, y) } func $介绍 { return ($敌人.活着() ? $提示出现 : $提示死亡) + " " } func $影响(玩家) { if $敌人.活着() { 玩家.血量 = 玩家.血量 - $敌人.攻击 println("敌人造成{}点伤害,你还有{}点血。".format($敌人.攻击, 玩家.血量)) } } } 地图 = [ [nil, 取胜位置(1,0), nil], [nil, 敌人位置(1,1), nil], [敌人位置(0,2), 起始位置(1,2), 敌人位置(2,2)], [nil, 敌人位置(1,3), nil] ]
在原代码中,有两处引用此模块。结果发现两处得到的同一地点的敌人不同。用简化例子说明(更多测试见此 issue):
ran.ul 为被引用模块:using random r = random.random() println("in ran: `r`")
m1.ul 引用 ran 中的 r:using * in ran println("in m1: `r`")
m2.ul 引用 m1 后引用了 ran:using * in m1 using * in ran println("in m2: `r`")
运行 木兰 m2.ul 输出如下:in ran: 0.14259277701409412 in m1: 0.14259277701409412 in ran: 0.7840393404568102 in m2: 0.7840393404568102
而类似情况在 Python 下,ran 仅被导入一次,m1 和 m2 的输出值相同。
虽然仍需深入研究,但至少现在看来木兰的如此引用规则意味着在多处引用同一模块时要特别注意。在上面的游戏例程中,是通过方法传参规避了一处引用,达到了同样游戏功能。
另外,本周用现有测试集对木兰的 PyPI 发布版本进行了全面测试,结果发现其中有一个 测试/引用/引用本地包内py.ul 未通过(详见此处)。这是头次发觉 PyPI 发布版本与本地开发版的行为差别。仍需调查。
当了19年华为董事长,任正非尊称她孙总,为何曾3次递交辞呈能与任正非比肩的企业家不多,其中女性就更少了,但孙亚芳绝对算得上一个。2009年,华为成功超越阿尔卡特朗讯,诺基亚西门子,仅次于爱立信,成为全球第2大通信设备制造商。1987年成立
2000块预算,这4款手机最吃香,内行人最爱2021年,如果我们只有两千块预算的话,还能买到好用的手机吗?这确实是个问题,不少人觉得现在的手机越来越贵了,五六千的安卓手机都成寻常了,那两千块怎么够买一款好手机呢?这话倒也未必
美银预计今年全球芯片销售额飙升24将达到5440亿美元美国银行上调了其对今年全球芯片销售额的预期,预计电脑和汽车用芯片的需求将不断增长,并将英伟达和汽车芯片供应商ONSemiconductor列入其今年剩余时间的的首选股票清单。全球芯
高倍变焦iPhone的痛点!三星专利把控到底有多强?现如今,几乎所有的高端智能手机都具备高倍变焦这个功能,但唯独iPhone在这块一直没有什么起色!虽说iPhone在拍照视频的色彩把控方面一直都做得不错,但是我们要客观承认的是,高倍
为什么一些人会黑三星手机?很多人黑三星手机是正常的,因为他们不会用三星手机。其实三星手机的质数是非常高的,从屏幕到解码芯片等等,都是自已的产品。但是,很多的三星手机用户不知道,当自己买了三星手机后,为了用起
为什么有人买X70Pro也不愿意买华为Mate40Pro?萝卜青菜,各有所爱。就像有人愿意买现代,也不愿意买奔驰,很正常,没什么大惊小怪加价买了华为Mate40pro,我愿意,怎么了?我真的感觉vivo手机挺好用的!从x21换了x50,x
华为手机怎么投屏到电视机上?于使用华为手机的用户来说,多屏互动这个词可能并不陌生。因为如果你的手机支持此功能的话,当你下拉状态栏打开快捷功能开关界面,通常就能看到它(如果没有显示,可以尝试选择编辑快捷开关查找
通道越多的助听器价格一定是越贵吗?是的,同一系列的助听器,通道越多,价格越贵。一般来说同品牌的通道越多就越贵,但是每个品牌对通道的处理不一样,所以助听器的价钱不能仅仅用通道的多少来衡量,具体效果以试听感受为标准通道
支付宝被查!你的钱还安全吗?支付宝是阿里巴巴旗下的一个常用的支付手段,日常的生活能用的到的地方都可以使用。这次支付宝被查只是他的合规性问题的调查,对于我们存在支付宝的资金安全还是有保证的。而且这次被查从长远来
为什么苹果13,依旧有那么强大的市场号召力?优秀是对比出来的,看看苹果的友商们,目前是什么情况。三星有人说三星的衰落是从三星爆炸7开始的,处理态度上,国内国外两副嘴脸,以至于大家抛弃了三星。三星note7是2016年发生的,
GalaxyA73定位中端,1。08亿像素摄像头或将是亮点现在手机厂商越来越重视手机的影像实力了,尤其是三星的摄像实力一直走在了前列。自从GalaxyS20Ultra上推出了1。08亿像素的摄像头后,就引发了不少热议。最近有消息爆料称三星