二元组箭头表达式背后的语法糖

    xiaoxiao2024-11-25  69

    二元组表达式除了标准的小括号表达方式:("a","b") 还可以有箭头表达式:"a"->"b",看看背后是怎么被翻译的:

    在 Predef里定义了从类型A隐式转换到 ArrowAssoc 的方法:

    @deprecated("use `ArrowAssoc`", "2.11.0") def any2ArrowAssoc[A](x: A): ArrowAssoc[A] = new ArrowAssoc(x)

    在使用scala2.12时这个方法已经废弃,而是使用隐式类 看看 ArrowAssoc 这个类:

    /** @group implicit-classes-any */ implicit final class ArrowAssoc[A](private val self: A) extends AnyVal { @inline def -> [B](y: B): Tuple2[A, B] = Tuple2(self, y) def →[B](y: B): Tuple2[A, B] = ->(y) }

    定义了 -> 以及Unicode字符的→方法,实现上是创建了 Tuple2。

    性能考量的2点:

    1) ArrowAssoc是值类型,运行时虽有隐式转换,但避免了在堆上分配一个包装对象 2) ->方法是声明为@inline的,也提升了性能

    参考原文 http://hongjiang.info/scala-any2arrowassoc/

    最新回复(0)