赞
踩
符号标识
的格式为:name
.
它既是一个类型
,也是一个式
.:name
类型有个:name
值.
可在sumtypes
中的"类型标签
"项中使用此功能
,以区分
相同类型的项,如(:cenimeters,int|:meters,int)
.
还可用来构造无值
的sumtype
项,如(int|:none)
.
这是一项我叫符号成员
的新功能
.
它基于上面Neat
的标识类型
.
在某些语句和式
中,有个环境,当与符号
一起查看
时,它会取成员
并重写AST
以使用它.
支持函数调用
,变量声明
,switch
语句的case
语句及返回式
.
尽管应该,但尚未实现点式
.
为什么要实现它?为了证明即使是知识有限
的我也可做到.这不复杂.在@dkorpel
的帮助下,不到10
个小时的工作就指向
了正确的方向!
动机是在无值描述
类型下,描述和类型
标签.它也适合零成本
的值类型异常
,来替换零大小
结构.
包含所有示例的测试用例:
extern(C) void printf(const char*, ...); extern(C) void main() { int varB = :max; Context varS = :max; Enum varE = :End; Enum varF1 = functionReturn(); Enum varF2 = identity(:Middle); printf("%d <> %d <> %d <> %d <> %d\n", varB, varS.value, varE, varF1, varF2); switch(varF1) { case :Start: static assert(!__traits(compiles, { const fail = :max; })); break; default: assert(0); } static assert(!__traits(compiles, { const fail = :max; })); static assert(!__traits(compiles, { Context fail = :max.min; })); } struct Context { int value; enum Context min = Context(int.min); enum Context max = Context(int.max); } enum Enum { Start, Middle, End } Enum functionReturn() { return :Start; } Enum identity(Enum input) { return input; }
但值得复制的困难枚举varF2=identity(:Middle);
.
也可:
Enum varF2 = identity(:Middle);
Enum identity(Enum e) {
return e;
}
enum Enum {
Middle
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。