木兰语言多次引用模块的行为小结

栏目: 软件资讯 · 发布时间: 3年前

内容简介:续 上文,对重复引用的各种方式作了更多测试,基于当前理解作一小结。 简言之,由于每次引用模块都对其执行(exec)一次,在多处引用同一模块的情况下,引用顺序和模块位置不同会导致不同结果。 比如在 TypeDef ...

上文,对重复引用的各种方式作了更多测试,基于当前理解作一小结。

简言之,由于每次引用模块都对其执行(exec)一次,在多处引用同一模块的情况下,引用顺序和模块位置不同会导致不同结果。

比如在 TypeDef 模块中定义一个类:

type Type1 { ; } 

在同层目录下 Instance1 模块中声明一个个体:

using * in TypeDef

instance1 = Type1() 

那么在另一模块中,先后引用 TypeDef 和 Instance1,如下的 isa 判断(对应 python 的 isinstance)返回 true,意料之中:

using * in TypeDef
using * in Instance1

print(isa(instance1, Type1))

但是以下的三种情况,全都返回 false:

  • 情况 1:
using * in Instance1
using * in TypeDef

print(isa(instance1, Type1)) 
  • 情况 2:
using TypeDef
using Instance1

print(isa(Instance1.instance1, TypeDef.Type1)) 
  • 情况 3:
using Instance1
using TypeDef

print(isa(Instance1.instance1, TypeDef.Type1)) 

而如果 TypeDef 和 Instance1 在包内,行为又略有不同。如下返回 true(注意 TypeDef 在 Instance1 后引用)

using * in test.Instance1
using * in test.TypeDef

print(isa(instance1, Type1)) 

以下的三种情况,全都返回 false:

  • 情况 4:
using * in test.TypeDef
using * in test.Instance1

print(isa(instance1, Type1)) 
  • 情况 5:
using * in test.TypeDef
using test.Instance1

print(isa(test.Instance1.instance1, Type1)) 
  • 情况 6:
using * in test.Instance1
using test.TypeDef

print(isa(instance1, test.TypeDef.Type1)) 

测试用例 集结在此

暂没想到此种行为的应用场景。为规避,在应用中尽量保持“树式引用”,即一个模块只直接引用一次。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

操作系统概念(第六版)

操作系统概念(第六版)

(美)西尔伯斯查兹 / 郑扣根 / 高等教育出版社 / 2005-11 / 55.00元

《操作系统概念》(第6版翻译版)是讨论了操作系统中的基本概念和算法,并对大量实例(如Linux系统)进行了研究。全书内容共分七部分。第一部分概要解释了操作系统是什么、做什么、是怎样设计与构造的,也解释了操作系统概念是如何发展起来的,操作系统的公共特性是什么。第二部分进程管理描述了作为现代操作系统核心的进程以及并发的概念。第三部分存储管理描述了存储管理的经典结构与算法以及不同的存储管理方案。第四部分......一起来看看 《操作系统概念(第六版)》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具