考虑普通局部变量:
int foo = 0;
可分析为:
Type_Name Local_Name Operator Initial_Value
考虑is
表达式:
is(typeof(func) Params == __parameters)
这样:
is(Type_Name Local_Name Deconstruction_Pattern)
//后2都是可选的.
类型 | 意思 |
---|---|
is(Type) | 有类型,但省略了本地名称和解构模式.它只关心类型是否存在. |
is(Type:something) | 用: 表明可转为该类型 的析构模式 . |
is(Type==something) | 精确匹配,最易记 |
is(Type Identifier) | 必须存在某种类型,像整 a 一样,名字在型 后.跳过析构 类型 |
is(Type Identifier:something) | 与前: 一样,但可可选本地名 |
is(Type Identifier==something) | 同样 |
文档中还有其他,class
等,大多很简单,可初化标识符
为其他
.看起来,is(A B == C)
像B与C
在比较,但这是在声明变量
.
== C
整个为析构模式
,B
为变量.类型整 a=10
.
is(MyClass Parents == super)
==super
,其为基类
.因此把==
当作匹配析构模式
.更有意义.
static if(is(int[10] == T[N], T, size_t N))
只是,扩展了析构模式
.==
精确比较,T[N]
为声明模型.问题是多数时候
编译器不会告诉你模式格式不正确
,只是不匹配.因而通过静态断言
等来测试.
这样用,可选复杂名:
static if(is(int[10] OriginalType == T[N], T, size_t N))
知道如何分解的时候,就容易搞懂了.