给出以下代码:
class Foo[R](i: Int)(implicit ev: Ordering[R]) {
final type T = ev.type
}
我收到以下错误:
错误:(13,16)私有值ev逃脱了其定义范围的一部分 键入Foo.this.ev.type 输入T = ev.type
这让我觉得构造函数中声明的含义是私有的。
鉴于T
是最终的,它不会被覆盖,所以它不应该导致任何问题。我在这里错过了什么?
答案 0 :(得分:5)
class
构造函数中声明的所有参数都是private
,除非您告诉编译器它们不是。这与case class
不同,其中第一个参数列表中的所有参数默认为public
,除非您告诉编译器。
所以,是的,除非您专门为该值添加val
或其他类似公共的修饰符,否则默认为private
。因此,它告诉您私人成员通过您定义type
的方式被公开。
答案 1 :(得分:2)
我不认为这是因为它是隐含的。我认为这只是因为它是一个类参数(它是私有的)。如果删除隐式关键字,它仍然会给出相同的错误。另见Do scala constructor parameters default to private val?