非组合类型
作者:Timon Gehr:
原文地址
程序中的类型,有些是生成的.如,你有T,S,则T[],S[],T闭包(S)也是类型,
组合的意思是:组成类型不隐式依赖其环境,同时,环境类型,也不依赖组成类型.
如上示例:T[]和T闭包(S)不是完全组合,因为当T为空时,存在特例.
这种特例,导致语言的各种折腾.如如果式为空,编译器把中 式当作式;中;.这就是折腾,如果空不是特例,则不必这样.而许多语言,则将空当作空元组来处理.
本dip就有这种折腾,甚至不打算解决如下:
int apply(int delegate(int delegate(int)) f, int delegate(int) g){
return f(g);
}
如果,有属性多态,你可以这样:
int apply[qual a,qual b](int delegate(int delegate(int)a)b f, int delegate(int)a g)b{
return f(g);
}
该方案,简单,通用,且不按非组合方式重定义已有类型,而不必去折腾.也不必打断已有代码,也不会阻碍添加新特性.
空只能用于像空 闭包(S)或空[],其余就不像普通类型了.这就特殊了,难办了.
浙公网安备 33010602011771号