加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 类型安全等于宏?

发布时间:2020-12-16 18:31:20 所属栏目:安全 来源:网络整理
导读:对于 Scala,是否存在类型安全的等于===的实现,其开销超过==?也就是说,与Scalaz和ScalaUtils中的===不同,这是一个使用直接宏来执行检查的实现? 我想在很多地方使用===,但这些都是热点,所以我不希望这会产生任何额外的运行时成本(比如构造类型等). 解决方法
对于 Scala,是否存在类型安全的等于===的实现,其开销超过==?也就是说,与Scalaz和ScalaUtils中的===不同,这是一个使用直接宏来执行检查的实现?

我想在很多地方使用===,但这些都是热点,所以我不希望这会产生任何额外的运行时成本(比如构造类型等).

解决方法

我认为你可以用 machinist轻松实现.

GitHub上的README完全给出了===示例:

import scala.{specialized => sp}

import machinist.DefaultOps

trait Eq[@sp A] {
  def eqv(lhs: A,rhs: A): Boolean
}

object Eq {
  implicit val intEq = new Eq[Int] {
    def eqv(lhs: Int,rhs: Int): Boolean = lhs == rhs
  }

  implicit class EqOps[A](x: A)(implicit ev: Eq[A]) {
    def ===(rhs: A): Boolean = macro DefaultOps.binop[A,Boolean]
  }
}

然后你可以在==上使用零开销(没有额外的分配,没有额外的间接)的===

如果您正在寻找开箱即用的实施,spire(机械师发起的)提供了一个.

cats也提供了一个.

它们都是基于宏的,因为它们使用机械师来实现.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读