zoukankan      html  css  js  c++  java
  • 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)

    然而我觉得很傻逼 

  • 相关阅读:
    [ERR] Node 10.211.55.8:7001 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.
    PAT A1137 Final Grading (25 分)——排序
    PAT A1136 A Delayed Palindrome (20 分)——回文,大整数
    PAT A1134 Vertex Cover (25 分)——图遍历
    PAT A1133 Splitting A Linked List (25 分)——链表
    PAT A1132 Cut Integer (20 分)——数学题
    PAT A1130 Infix Expression (25 分)——中序遍历
    PAT A1142 Maximal Clique (25 分)——图
    PAT A1141 PAT Ranking of Institutions (25 分)——排序,结构体初始化
    PAT A1140 Look-and-say Sequence (20 分)——数学题
  • 原文地址:https://www.cnblogs.com/rayshen/p/5038937.html
Copyright © 2011-2022 走看看