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

二元组表达式除了标准的小括号表达方式:("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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值