设为首页 加入收藏

TOP

浅谈面向对象语言的类型运算 (二)
2014-11-23 23:21:09 来源: 作者: 【 】 浏览:4
Tags:面向 对象 语言 类型 运算
(T))=Base

其次,我们指定要计算类型Base所继承的那个接口Base[T]=>IEnumerable,我们可以使用

tm = params(Base) = {T=>string}

result = replace(IEnumerable, tm) = IEnumerable

因此对于一个泛型声明decl(T)所继承的一个接口Id,泛型声明D的实例类型T所对应的接口It等于replace(Td, params(T))。

因此对于IEnumerable[T]的函数GetEnumerator的返回值类型IEnumerator,聪明的读者肯定想到,IEnumerable所对应的类型就是replace(IEnumerator, params(IEnumerable)) == IEnumerator了。这个结果跟求实例类型所继承的接口类型的方法一样。

我们可以知道,在计算泛型类型的实例类型的成员类型中,我们总是不断地在计算replace(A, params(B))的结果。因此在我实现的带泛型的面向对象托管语言:Vczh Library++ 3.0的ManagedX语言的语义分析器的符号表的代码里面,真实出现了使用C++所完成的this、base、decl、params、replace和replace_by_type = replace(A, params(B))这样的六个函数。因为在C++里面,一个类型的实例只能被表示为一个带有复杂结构的对象的指针。因此只要符号表在计算类型的过程中,把所有产生出来的类型保存下来,建立索引,并且使得“只要类型A和类型B是同一个类型则有他们的指针P(A)和P(B)相等”的这个条件恒成立的话,类型系统的计算速度将直接提高。

至于函数类型的推导法则(主要是应用于lambda表达式的缩写语法),则等到我开发到那里的时候再写后续的文章了。System.CoreManaged有幸不需要使用lambda表达式,使得我的第一个里程碑提前到来。

作者“λ-calculus”

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇linux C中重要的数据结构――结构.. 下一篇Member Function Templates(成员..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: