d的is表达式

考虑普通局部变量:

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

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

posted @   zjh6  阅读(40)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示