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

scala – 值类引入了不必要的公共方法

发布时间:2020-12-16 09:21:42 所属栏目:安全 来源:网络整理
导读:看看我的图书馆的一些scala-docs,在我看来,价值类有一些不必要的噪音.例如: implicit class RichInt(val i: Int) extends AnyVal { def squared = i * i} 这引入了一个不需要的符号i: 4.i // arghh.... 这个东西出现在scala文档和IDE自动完成中,这真的不好
看看我的图书馆的一些scala-docs,在我看来,价值类有一些不必要的噪音.例如:

implicit class RichInt(val i: Int) extends AnyVal {
  def squared = i * i
}

这引入了一个不需要的符号i:

4.i   // arghh....

这个东西出现在scala文档和IDE自动完成中,这真的不好.

所以…任何想法如何缓解这个问题?我的意思是你可以使用RichInt(val self:Int),但这不会使它更好(4.self,wth?)

编辑:

在下面的例子中,编译器是否删除中间对象?

import language.implicitConversions

object Definition {
  trait IntOps extends Any { def squared: Int }
  implicit private class IntOpsImpl(val i: Int) extends AnyVal with IntOps {
    def squared = i * i
  }
  implicit def IntOps(i: Int): IntOps = new IntOpsImpl(i)  // optimised or not?
}

object Application {
  import Definition._
  // 4.i  -- forbidden
  4.squared
}

解决方法

在Scala 2.11中,您可以使val私人,这修复了这个问题:

implicit class RichInt(private val i: Int) extends AnyVal {
  def squared = i * i
}

(编辑:李大同)

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

    推荐文章
      热点阅读