gpt4 book ai didi

scala - 类型安全等于宏?

转载 作者:行者123 更新时间:2023-12-04 05:59:09 25 4
gpt4 key购买 nike

是否有类型安全等于 === 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 提供一个。

它们都是基于宏的,因为它们使用 machinist为实现。

关于scala - 类型安全等于宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32667674/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com