• d的is表达式


    考虑普通局部变量:

    int foo = 0;
    
    • 1

    可分析为:

    Type_Name Local_Name Operator Initial_Value
    
    • 1

    考虑is表达式:

    is(typeof(func) Params == __parameters)
    
    • 1

    这样:

    is(Type_Name Local_Name Deconstruction_Pattern)
    //后2都是可选的.
    
    • 1
    • 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)
    
    • 1

    ==super,其为基类.因此把==当作匹配析构模式.更有意义.

    static if(is(int[10] == T[N], T, size_t N))
    
    • 1

    只是,扩展了析构模式.==精确比较,T[N]为声明模型.问题是多数时候编译器不会告诉你模式格式不正确,只是不匹配.因而通过静态断言等来测试.
    这样用,可选复杂名:

    static if(is(int[10] OriginalType == T[N], T, size_t N))
    
    • 1

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

  • 相关阅读:
    【夜读】影响一生的五大定律
    Linux学习-51-进程间通信和终止线程命令
    6. Design A Web Crawler
    Ae 效果:CC Blobbylize
    react_14
    bash install.sh ********错误
    一种改进的鲸鱼优化算法-附代码
    python爬取某网站上的歌曲
    27-spark各版本对比
    精品基于NET实现的课堂学分管理系统
  • 原文地址:https://blog.csdn.net/fqbqrr/article/details/125466982