【问题标题】:Are implicits private?隐含是私有的吗?
【发布时间】:2016-10-19 17:21:31
【问题描述】:

给定以下代码:

class Foo[R](i: Int)(implicit ev: Ordering[R]) {
  final type T = ev.type
}

我收到以下错误:

错误:(13, 16) 私有值 ev 作为 输入 Foo.this.ev.type type T = ev.type

这让我认为在构造函数中声明的隐式是私有的。 鉴于T 是最终的,它不会被覆盖,所以它不应该引起任何问题。我在这里想念什么?

【问题讨论】:

  • 不,该错误与依赖类型有关。

标签: scala


【解决方案1】:

class 构造函数中声明的所有参数都是private,除非你告诉编译器它们不是。这与case class 不同,其中第一个参数列表中的所有参数默认为public,除非您另外告诉编译器。

所以,是的,除非您特别添加 val 或其他类似公共的修饰符到该值,否则默认为 private。因此,它告诉您私有成员正在通过您定义 type 的方式公开。

【讨论】:

    【解决方案2】:

    我不认为这是因为它是隐含的。我认为这只是因为它是一个类参数(它是私有的)。如果您删除隐式关键字,它仍然会给出相同的错误。另见Do scala constructor parameters default to private val?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-26
      • 1970-01-01
      • 2012-03-17
      • 2011-04-21
      • 2011-08-24
      • 1970-01-01
      • 2017-06-26
      • 1970-01-01
      相关资源
      最近更新 更多