美文网首页kotlin
Kotlin 学习笔记(一)infix函数

Kotlin 学习笔记(一)infix函数

作者: youthcity | 来源:发表于2018-05-22 10:47 被阅读32次

    什么是 infix 函数

    Kotlin允许在不使用括号和点号的情况下调用函数,那么这种函数被称为 infix函数。

    举个例子,直观地感受一下:

    map(
      1 to "one",
      2 to "two",
      3 to "three"
    )
    

    这里的 to 就是一个infix函数。看起来像是一个关键字,实际是一个to()方法。
    下面是to的源码。可以看到这个方法前面除了使用了publich修饰外,还多了一个infix

    /**
     * Creates a tuple of type [Pair] from this and [that].
     *
     * This can be useful for creating [Map] literals with less noise, for example:
     * @sample samples.collections.Maps.Instantiation.mapFromPairs
     */
    public infix fun <A, B> A.to(that: B): Pair<A, B> = Pair(this, that)
    

    中缀表示法

    中缀表示法(或中缀记法)是一个通用的算术或逻辑公式表示方法, 操作符是以中缀形式处于操作数的中间(例:3 + 4)。
    标有infix函数,可以使用中缀表示法调用。

    如何写一个 infix 函数

    必须满足以下要求:

    class Util(val number:Int) {
        infix fun sum(other: Int) {
          println(number + other)
       }
    }
    
    val u = Util(5)
     
    u sum 5 //  10
    u sum 7 // 12
    

    请注意,中缀函数总是要求指定接收者与参数。当使用中缀表示法在当前接收者上调用方法时,需要显式使用 this;不能像常规方法调用那样省略。

    class MyStringCollection {
        infix fun add(s: String) { /* …… */ }
        
        fun build() {
            this add "abc"   // 正确
            add("abc")       // 正确
            add "abc"        // 错误:必须指定接收者
        }
    }
    

    中缀函数与操作符的优先级

    1. 中缀函数调用的优先级低于算术操作符、类型转换以及 rangeTo 操作符
    1 shl 2 + 3  等价于         1 shl (2 + 3)
    0 until n * 2 等价于        0 until (n * 2)
    xs union ys as Set<*>  等价于  xs union (ys as Set<*>)
    
    1. 中缀函数调用的优先级高于布尔操作符 && 与 ||、is- 与 in- 检测以及其他一些操作符。
    a && b xor c  等价于   a && (b xor c)
    a xor b in c  等价于  (a xor b) in c
    

    相关资料

    相关文章

      网友评论

        本文标题:Kotlin 学习笔记(一)infix函数

        本文链接:https://www.haomeiwen.com/subject/cqthjftx.html