• Swift 吐槽下Swift里一个逼死强迫症的语法:中缀语法


    中缀语法是OC里特有的一种,就是在函数的参数前面加一个解释词,让调用的时候明白该参数的含义

    比如:

    -(void)processDataWithparamaA:(NSString *)paramaA paramaB:(NSString *)paramaB{
    }

    调用的时候:

        [self processDataWithparamaA:@"A" paramaB:@"B"];

    不过你发现没,这中缀语法的前提是你必须在函数名的最前面,写个With啥的说明第一个参数的名字,否则第一个参数是没有中缀的。

    这样写,确实让调用的时候看起来非常顺眼,[xxxxxxWithparamaA:@"A" paramaB:@"B"] 参数看起来好像非常一致啊,好评。

    那我们再回到swift,假如我们这样声明一个函数

        func processData2(paramaA:String,paramaB:String){}

    但是他的调用竟然学OC的中缀,省略了第一个参数,那谁来告诉我第一个参数啥意思?。。

            processData2("a", paramaB: "b")

    作为一个强迫症,我不能忍啊

    如果开发这个语言的是为了让我们适应OC的函数命名习惯(就是函数名里要加个Withxxx,xxx是第一个参数的中缀)

    那我就必须这样声明:     

        func processData2WithparamaA(paramaA:String,paramaB:String){}

    卧槽,这是什么鬼!!。。

    然后调用呢?。。。尼玛,在括号外面了有木有。。。里面的paramaA简直毫无存在感啊

            processData2WithparamaA("a", paramaB: "b")

    OC调用函数是这样的 [self processDataWithparamaA:@"A" paramaB:@"B"]

    两边是中括号啊

    这种优雅你Swift的小括号学不来的啊。。

    好在,开发Swift的那位Chris Lattner仁兄,又想到某些开发者不喜欢调用的时候带什么鸡毛中缀,于是想粗了加一个下划线来省略中缀的方法:

        func processData3(paramaA:String,_ paramaB:String){}

    这样,调用的时候就再也不需要写参数了,妈妈再也不担心我范强迫症了:

            processData3("a", "b")

    然后,夷?哪里好像不对劲? 。。意思是说,我好像完全可以这样写

     func processData3(_ paramaA:String,_ paramaB:String){}

    编译是能通过,但是编译器会提示你,这种写法是不规范的。(Swift 2.2中已修改可以通过编译,且第一个参数加不加下划线是一样的,在调用时均没有参数名)

    这又是何必啊。。。我只是一个喜欢对称的孩子。。

    给我留条生路啊。。。

    最后给一个可能比较靠谱的解释就是:

    swift的闭包是非常常用的,但是其调用方式和函数是一样的

    为了区分,函数在调用时会省略第一个参数 callfunc(a,paramB:b),而闭包在调用时必须完整callblock(paramA:a,paramB:b)

    然而我觉得很傻逼 

  • 相关阅读:
    Web发布cab文件打包的ActiveX控件总结 (转)
    【转】GLSL语言内置变量(转)
    osg学习 osg源码分析最长的一帧 第五日
    利用ATL技术创建ActiveX控件CircleCtl 。简单介绍 VC2003 使用 ATL 开发 ActiveX 控件(转)
    不用安装界面器实现系统支持xvid编码器
    BitBlt 注意事项(CAPTUREBLT) (转)
    使用ATL开发ActiveX控件
    Ossimplanet编译笔记(VS2008)(转载)
    端午小长假谨防挂马网站 病毒模仿杀软骗取钱财 狼人:
    2009年度全球顶级杀毒软件(性价比)排名 狼人:
  • 原文地址:https://www.cnblogs.com/rayshen/p/5038937.html
Copyright © 2020-2023  润新知