当前位置:网站首页>d的is表达式

d的is表达式

2022-06-26 12:58:00 fqbqrr

考虑普通局部变量:

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))

知道如何分解的时候,就容易搞懂了.

原网站

版权声明
本文为[fqbqrr]所创,转载请带上原文链接,感谢
https://fqbqrr.blog.csdn.net/article/details/125466982