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] } } 然后你可以在==上使用零开销(没有额外的分配,没有额外的间接)的=== 如果您正在寻找开箱即用的实施,
它们都是基于宏的,因为它们使用机械师来实现. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 基于Xfire SOAP Header的WebService安全验证教程
- angular ngrx store error无法读取undefined的属性’schedu
- 如何连接Angular 2和php后端(mysql)
- Bootstrap DateTimePicker选择月份BUG
- twitter-bootstrap-3 – Bootstrap 3导航栏的结构是什么?
- 混淆关于vim折叠 – 如何禁用?
- shell – 1> / dev / null 2>&1&p
- 斯卡拉 – 期货的实际使用?即,如何杀死他们?
- angularjs – 如何在没有新模板的情况下在Ionic选项卡中呈现
- 7、yum 学习笔记