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

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

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

@inline implicit def any2ArrowAssoc[A](x: A): ArrowAssoc[A] = new ArrowAssoc(x)

看看 ArrowAssoc 这个类:

final class ArrowAssoc[A](val __leftOfArrow: A) extends AnyVal {

    @inline 
    def -> [B](y: B): Tuple2[A, B] = Tuple2(__leftOfArrow, y)

    def →[B](y: B): Tuple2[A, B] = ->(y)
}

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

性能考量的2点:

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

发表评论

电子邮件地址不会被公开。 必填项已用*标注